INFO: Trabalhar com a estrutura FILETIME

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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 188768
Sumário
Uma hora do ficheiro representa as determinada data e hora em que um determinado ficheiro foi criado, acedido pela última vez ou escrito pela última vez. Uma hora de ficheiro é guardada numa estrutura FILETIME. Esta estrutura é utilizada com várias chamadas de API do Win32.
Mais Informação
A estrutura FILETIME representa o número de intervalos de 100-nanosegundos desde 1 de Janeiro de 1601. A estrutura é constituída por dois valores de 32 bits que combinam para formar um único valor de 64 bits.
   typedef struct _FILETIME {     DWORD dwLowDateTime;     DWORD dwHighDateTime;   } FILETIME;				
tenha em atenção que se baseia a estrutura FILETIME em intervalos de 100-nanosegundos. É útil definir os símbolos seguintes quando trabalhar com horas de ficheiro. Por exemplo:
   #define _SECOND ((int64) 10000000)   #define _MINUTE (60 * _SECOND)   #define _HOUR   (60 * _MINUTE)   #define _DAY    (24 * _HOUR)				

Efectuar Arithmetics com horas de ficheiro

É frequentemente necessário efectuar uma aritmética simples no ficheiro vezes. Por exemplo, poderá ser necessário saber quando um ficheiro é 30 dias. Para executar uma aritmética um tempo de ficheiro, necessita de converter o FILETIME um quadword (um 64-bit inteiro), executar a aritmética e, em seguida, converter o resultado para um FILETIME.

Partindo do princípio ft é uma estrutura FILETIME que contém a hora de criação de um ficheiro, o código de exemplo seguinte adiciona 30 dias 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 );				

Definir horas de ficheiro

Pode definir as horas de ficheiro para um ficheiro utilizando 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.   );				
esta função permite-lhe modificar a criação, último acesso e escrever pela última vezes sem alterar o conteúdo do ficheiro. Para utilizar esta função, tem de ter um identificador para o ficheiro aberto. Este identificador de ficheiro pode ser obtido a partir de uma chamada para CreateFile() ou OpenFile(). O ficheiro tem de ser aberto com acesso GENERIC_WRITE. Depois de definidos os tempos de ficheiro, deve liberte o identificador de ficheiro através de uma chamada para CloseHandle().

SzFilename assuming é um nome de ficheiro válido e ft é uma estrutura FILETIME, o código de exemplo seguinte define a data de criação para o ficheiro para a hora num 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);   }				

Mostrar horas de ficheiro

A hora do ficheiro se baseia em formato de universal hora coordenada (UTC), Coordinated Time. Tempo baseado em UTC livremente é definido como a data actual e a hora do dia em Greenwich, Inglaterra. Vai provavelmente pretende apresentar a hora ficheiro relativamente à hora local (ou seja, a data e hora do dia para o fuso horário). Para efectuar este procedimento, pode utilizar FileTimeToLocalFileTime() da seguinte forma:
   BOOL FileTimeToLocalFileTime(     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.     LPFILETIME lpLocalFileTime   // Pointer to converted file time.   );
Nota: esta função utiliza as definições actuais para o fuso horário e a hora de Verão. Por conseguinte, caso se trate de hora de Verão, esta função irá ter hora de Verão em consideração, mesmo se a hora que estiver a converter for na hora padrão.

Para apresentar a hora de ficheiro de forma significativa, primeiro tem de convertê-la uma hora de sistema utilizando FileTimeToSystemTime() da seguinte forma:
   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 utilizando membros individuais para o mês, dia, ano, dias da semana, hora, minuto, segundo e milisegundos.

Também é preferível apresentar a data e hora num formato consistente com a região actual seleccionada para o sistema. Pode fazê-lo utilizando GetDateFormat() e GetTimeFormat() da seguinte forma:
   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 passar LOCALE_USER_DEFAULT como o primeiro parâmetro para estas funções, forneça para formatar a data/hora passada acordo com para o formato predefinido para a região actual. Neste caso, pode passar nulo para os parâmetros lpFormat.

Partindo do princípio ft é uma estrutura FILETIME que contém um valor UTC, o seguinte código de exemplo imprime data armazenada no ft:
   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 );				

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 188768 - Última Revisão: 01/23/2007 19:28:47 - Revisão: 3.3

Microsoft Win32 Application Programming Interface

  • kbmt kbapi kbdatetime kbfileio kbinfo kbkernbase KB188768 KbMtpt
Comentários
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)