Tempos de Arquivo

A hora do arquivo é um valor de 64 bits que representa o número de intervalos de 100 nanossegundos decorridos desde 12:00 de 1º de janeiro de 1601 UTC (Tempo Universal Coordenado). O sistema registra os tempos de arquivo quando os aplicativos criam, acessam e gravam em arquivos.

O sistema de arquivos NTFS armazena valores de tempo no formato UTC, portanto, eles não são afetados por alterações no fuso horário ou horário de verão. O sistema de arquivos FAT armazena valores de tempo com base na hora local do computador. Por exemplo, um arquivo salvo às 15:00 PST em Washington é visto como 18:00 EST em Nova York em um volume NTFS, mas é visto como 3:00pm EST em Nova York em um volume FAT.

Os carimbos de data/hora são atualizados em vários momentos e por vários motivos. A única garantia sobre um carimbo de data/hora do arquivo é que a hora do arquivo é refletida corretamente quando o identificador que faz a alteração é fechado.

Nem todos os sistemas de arquivos podem registrar a criação e os últimos tempos de acesso, e nem todos os sistemas de arquivos os registram da mesma maneira. Por exemplo, a resolução do tempo de criação no FAT é de 10 milissegundos, enquanto o tempo de gravação tem uma resolução de 2 segundos e o tempo de acesso tem uma resolução de 1 dia, portanto, é realmente a data de acesso. O sistema de arquivos NTFS atrasa as atualizações para a última hora de acesso de um arquivo em até 1 hora após o último acesso.

Para recuperar os tempos de arquivo de um arquivo especificado, use a função GetFileTime . GetFileTime copia a criação, o último acesso e os últimos tempos de gravação em estruturas INDIVIDUAIS FILETIME . Você também pode recuperar tempos de arquivo usando as funções FindFirstFile e FindNextFile . Essas funções copiam os tempos de arquivo para estruturas FILETIME em uma estrutura WIN32_FIND_DATA . Ao gravar em um arquivo, a última hora de gravação não será totalmente atualizada até que todos os identificadores usados para gravação sejam fechados.

Para definir os tempos de arquivo para um arquivo, use a função SetFileTime . Essa função permite modificar a criação, o último acesso e os últimos tempos de gravação sem alterar o conteúdo do arquivo. Você pode comparar os tempos de arquivos diferentes usando a função CompareFileTime . A função compara duas vezes de arquivo e retorna um valor que indica qual hora é posterior ou retorna 0 (zero) se os tempos forem iguais.

Se você planeja modificar os horários do arquivo para arquivos especificados, pode converter uma data e hora do dia em uma hora de arquivo usando a função SystemTimeToFileTime . Você também pode obter o tempo do sistema em uma estrutura FILETIME chamando a função GetSystemTimeAsFileTime .

Para facilitar a exibição de um tempo de arquivo para um usuário, use a função FileTimeToSystemTime . FileTimeToSystemTime converte a hora do arquivo e copia o mês, o dia, o ano e a hora do dia da hora do arquivo para uma estrutura SYSTEMTIME .

Horários de Arquivo e Horário de Verão

Você deve tomar cuidado ao usar os horários de arquivo se o usuário tiver definido o sistema para se ajustar automaticamente para o horário de verão.

Para converter uma hora de arquivo em hora local, use a função FileTimeToLocalFileTime . No entanto, FileTimeToLocalFileTime usa as configurações atuais para o fuso horário e o horário de verão. Portanto, se for horário de verão, levará em conta o horário de verão, mesmo que o tempo de arquivo que você está convertendo esteja no horário padrão.

O sistema de arquivos FAT registra as horas no disco no horário local. GetFileTime recupera tempos UTC armazenados em cache do sistema de arquivos FAT. Quando ele se torna horário de verão, o tempo recuperado por GetFileTime está desativado por uma hora, pois o cache não é atualizado. Quando você reinicia o computador, o tempo armazenado em cache que GetFileTime recupera está correto. FindFirstFile recupera a hora local do sistema de arquivos FAT e o converte em UTC usando as configurações atuais para o fuso horário e o horário de verão. Portanto, se for horário de verão, FindFirstFile levará em conta o horário de verão, mesmo que o tempo de arquivo que você está convertendo esteja no horário padrão.

O sistema de arquivos NTFS registra tempos no disco em UTC. Para considerar o horário de verão ao converter uma hora de arquivo em uma hora local, use a seguinte sequência de funções em vez de usar FileTimeToLocalFileTime:

Tempos de arquivo e CDFS

Os carimbos de data e hora dos arquivos localizados ou originados da mídia usando o CDFS (Compact Disc File System) são ajustados para o fuso horário local. O ISO 9660 afirma que o CDFS deve exibir as informações de data corretamente para o fuso horário local. Isso é feito para que as datas dos arquivos no CDFS sejam exibidas da mesma forma que as do UDF (Formato Universal de Disco). UDF é o padrão mais recente para mídia de distribuição. Se o código depender das informações de data não modificadas de um arquivo que reside ou se origina de mídia usando CDFS, ele pode não funcionar corretamente.