Compartilhar via


Tempos de Arquivo

Um de tempo de 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 EST 6:00pm 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 o último tempo 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 para estruturas deFILETIMEindividuais. 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 de FILETIME em uma estrutura WIN32_FIND_DATA. Ao gravar em um arquivo, a hora da última gravação não será totalmente atualizada até que todos os identificadores usados para gravação sejam fechados.

Para definir os tempos de arquivo de um arquivo, use a funçãoSetFileTime. 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 tempos de arquivo para arquivos especificados, poderá 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 deFILETIME chamando a funçãoGetSystemTimeAsFileTime.

Para facilitar a exibição de um tempo de arquivo para um usuário, use a funçãoFileTimeToSystemTime. 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 estruturaSYSTEMTIME.

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

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

Para converter uma hora de arquivo em hora local, use a funçãoFileTimeToLocalFileTime. 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 pelo GetFileTime está desativado por uma hora, porque 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 leva em conta o horário de verão, mesmo que a hora do 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:

  • FileTimeToSystemTime
  • SystemTimeToTzSpecificLocalTime
  • SystemTimeToFileTime

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 da mídia usando CDFS, ele pode não funcionar corretamente.