INFO: Trabalhando com a estrutura FILETIME

Traduções deste artigo Traduções deste artigo
ID do artigo: 188768 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Uma hora de arquivo representa a data específica e a hora em que um determinado arquivo foi criado, acessado pela última vez ou gravado pela última vez para. Uma hora de arquivo será armazenada em uma estrutura FILETIME. Essa estrutura é usada com várias chamadas de API do Win32.

Mais Informações

A estrutura FILETIME representa o número de intervalos de 100 nanossegundos desde 1 de janeiro de 1601. A estrutura consiste em dois valores de 32 bits que combinam para formar um único valor de 64 bits.
   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
Observe que a estrutura FILETIME é baseada em intervalos de 100 nanossegundos. É útil definir os símbolos a seguir ao trabalhar com tempos de arquivo. Por exemplo:
   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

Executar Arithmetics com tempos de arquivo

Geralmente é necessário executar uma aritmética simples em horários de arquivos. Por exemplo, você talvez precise saber quando um arquivo é 30 dias. Para executar uma aritmética em uma hora de arquivo, você precisa converter o FILETIME um quadword (um inteiro de 64 bits), executar os cálculos aritméticos e converter o resultado para um FILETIME.

Supondo que ft é uma estrutura FILETIME que contém a hora de criação de um arquivo, o código de exemplo a seguir adiciona 30 dias para a hora:
   ULONGLONG qwResult;

   // Copy the time into a quadword.
   qwResult = (((ULONGLONG) ft.dwHighDateTime) << 32) + ft.dwLowDateTime;

   // Add 30 days.
   qwResult += 30 * _DAY;

   // Copy the result back into the FILETIME structure.
   ft.dwLowDateTime  = (DWORD) (qwResult & 0xFFFFFFFF );
   ft.dwHighDateTime = (DWORD) (qwResult >> 32 );
				

Horas de arquivo de configuração

Você pode definir os horários de arquivo para um arquivo usando a função SetFileTime().
   BOOL SetFileTime(
     HANDLE hFile,                     // Handle to the file.
     CONST FILETIME *lpCreationTime,   // Time the file was created.
     CONST FILETIME *lpLastAccessTime, // Time the file was last accessed.
     CONST FILETIME *lpLastWriteTime   // Time the file was last
                                       // written to.
   );
				
essa função permite que você modificar a criação, último acesso e última gravação vezes sem alterar o conteúdo do arquivo. Para usar essa função, você deve ter um identificador para o arquivo aberto. Esse identificador de arquivo pode ser obtido de uma chamada para CreateFile() ou OpenFile(). O arquivo deve ser aberto com acesso GRAVAÇÃO_GENÉRICA. Depois que definir os horários de arquivo, você deve liberar o identificador de arquivo por meio de uma chamada para CloseHandle().

Supondo que szFilename é um nome de arquivo válido e ft é uma estrutura FILETIME, o código de exemplo a seguir define a data de criação para o arquivo para a hora contida ft:
   BOOL bResult;
   HANDLE hFile = CreateFile( szFilename,
      GENERIC_WRITE, // The file must be opened with write access.
      FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL );

   if (hFile != INVALID_HANDLE_VALUE) {
      bResult = SetFileTime( hFile, &ft, NULL, NULL );
      CloseHandle(hFile);
   }
				

Exibindo períodos de arquivo

A hora de arquivo é baseado em acordo hora universal coordenada (UTC). Tempo de UTC flexível é definido como a data atual e a hora do dia em Greenwich, Inglaterra. Provavelmente você desejará exibir o arquivo de tempo em relação ao horário local (ou seja, a data e hora do dia para o fuso horário). Para fazer isso, você pode usar FileTimeToLocalFileTime() da seguinte maneira:
   BOOL FileTimeToLocalFileTime(
     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.
     LPFILETIME lpLocalFileTime   // Pointer to converted file time.
   );
Observação que essa função usa as configurações atuais para o fuso horário e o horário de verão. Portanto, se é hora de verão, essa função terão horário de verão em conta, mesmo se o tempo que você está convertendo estiver no período padrão.

Para exibir o arquivo a hora de uma maneira significativa, você primeiro precisa convertê-lo em uma hora do sistema usando FileTimeToSystemTime() da seguinte maneira:
   BOOL FileTimeToSystemTime(
     CONST FILETIME *lpFileTime, // Pointer to file time to convert.
     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive
   );                            // system time.
				
estrutura SYSTEMTIME O representa uma data e hora usando membros individuais para o mês, dia, ano, dia da semana, hora, minuto, segundo e milissegundos.

Também é preferível para exibir a data e hora em um formato consistente com a localidade atual selecionada para o sistema. Você pode fazer isso usando GetDateFormat() e GetTimeFormat() da seguinte maneira:
   int GetDateFormat(
     LCID Locale,              // Locale for which date is to be formatted.
     DWORD dwFlags,            // Flags specifying function options.
     CONST SYSTEMTIME *lpDate, // Date to be formatted.
     LPCTSTR lpFormat,         // Date format string.
     LPTSTR lpDateStr,         // Buffer for storing formatted string.
     int cchDate               // Size of buffer.
   );

   int GetTimeFormat(
     LCID Locale,              // Locale for which time is to be formatted.
     DWORD dwFlags,            // Flags specifying function options.
     CONST SYSTEMTIME *lpTime, // Time to be formatted.
     LPCTSTR lpFormat,         // Time format string.
     LPTSTR lpTimeStr,         // Buffer for storing formatted string.
     int cchTime               // Size of buffer.
   );
				
por passando LOCALE_USER_DEFAULT como o primeiro parâmetro para essas funções, você diga para formatar a passado data/hora acordo com para o formato padrão para a localidade atual. Nesse caso, você pode passar NULL para os parâmetros lpFormat.

Supondo que ft é uma estrutura FILETIME que contém um valor de UTC, o código de exemplo a seguir imprime a data armazenada em pés:
   SYSTEMTIME st;
   char szLocalDate[255], szLocalTime[255];

   FileTimeToLocalFileTime( &ft, &ft );
   FileTimeToSystemTime( &ft, &st );
   GetDateFormat( LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL,
     szLocalDate, 255 );
   GetTimeFormat( LOCALE_USER_DEFAULT, 0, &st, NULL, szLocalTime, 255 );
   printf( "%s %s\n", szLocalDate, szLocalTime );
				

Propriedades

ID do artigo: 188768 - Última revisão: terça-feira, 23 de janeiro de 2007 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Interface de Programação de Aplicativos do Microsoft Win32 nas seguintes plataformas
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Palavras-chave: 
kbmt kbapi kbdatetime kbfileio kbinfo kbkernbase KB188768 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 188768

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com