É possível ter um arquivo com data de modificação anterior à data de criação? Que ações fariam com que esse evento ocorresse?
Responder1
Se você criar um arquivo do zero, ele terá um horário de criação "agora" e uma data de modificação "agora". Agora imagine copiar este arquivo para outra unidade. O Windows manterá a hora da modificação, mas a hora de criação desse arquivo será definida como a hora em que você copiou o arquivo para aquela unidade (ou seja, a hora em que o arquivo foi criado emquedirigir). Simples assim.
Na verdade está correto:
- A última vez que o conteúdo do arquivo foi alterado é armazenada na hora da modificação.
- A hora em que o arquivo foi criado nesta mesma unidade é armazenada na hora de criação.
Responder2
No Windows, é muito fácil definir (falsificar, se preferir) os horários de criação e modificação de um arquivo. Você não precisa alterar o relógio do computador; você nem precisa de acesso de administrador local. Tudo que você precisa é de acesso de gravação ao arquivo em questão.
Para definir o horário de criação de um arquivo com o PowerShell usandoSetCreationTime
:
[System.IO.File]::SetCreationTime("C:\path\to\file.ext", (Get-Date "8/8/2088"))
Para definir a hora da última modificação usandoSetLastWriteTime
:
[System.IO.File]::SetLastWriteTime("C:\path\to\file.ext", (Get-Date "7/4/1776"))
No Linux, você pode alterar facilmente a hora da última modificação de um arquivo com o -d
sinalizador touch
, conforme mostrado emesta resposta do Pergunte ao Ubuntu. Não existe realmente uma noção de data de criação para arquivos em sistemas de arquivos Linux (leitura adicional em Unix e Linux).
Responder3
Considere um arquivo .tar extraído. Normalmente, os arquivos extraídos terão um carimbo de data/hora da última modificação atribuído a partir do conteúdo do arquivo (que normalmente está no passado, a menos que você seja um viajante do tempo). No que diz respeito ao sistema de arquivos, esses arquivos acabaram de ser criados.
Também existem utilitários para alterar o horário de modificação de arquivos existentes, no Linux por exemplo este é otocarcomando.
Responder4
A coisa mais importante a ser observada aqui é que o horário de modificação do arquivo não é realmente especial - ele é armazenado como qualquer outro dado. Não há como saber quando os dados foramna verdadeúltimo escrito ou lido.
A partir daqui, podemos ver que é sempre possível (excluindo mídia de gravação única como um CD) modificar diretamente os bits em uma unidade que armazena a hora da última modificação, ou mesmo a hora de criação.
De forma mais prática, isso também é possível em sistemas operacionais comuns, como observaram outras respostas. No Windows, isso é fornecido pelo WinAPISetFileTime
função, e você pode fazer isso comutime
no Linux. Ferramentas como touch
construir sobre essas APIs.
O uso legítimo mais comum para essas APIs é preservar o tempo de modificação, por exemplo, ao copiar arquivos, extraí-los de arquivos, etc.