你目前正处于脱机状态,正在等待 Internet 重新连接

FILETIME 结构使用信息:

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 188768
概要
文件时间表示的特定日期和时间的给定的文件 wascreated,最后一次访问或写入的最后一个。在 aFILETIME 结构中存储文件时。此结构用于各种 Win32 API 调用。
更多信息
FILETIME 结构表示数 100 纳秒 intervalssince 1601 年 1 月 1 日。该结构由两个 32 位值 thatcombine,以形成一个 64 位值组成。
   typedef struct _FILETIME {     DWORD dwLowDateTime;     DWORD dwHighDateTime;   } FILETIME;				
请注意 FILETIME 结构基于 100 纳秒为间隔。这有助于定义下列符号时使用的文件的时间。例如:
   #define _SECOND ((int64) 10000000)   #define _MINUTE (60 * _SECOND)   #define _HOUR   (60 * _MINUTE)   #define _DAY    (24 * _HOUR)				

执行 Arithmetics 文件时间

就通常需要对文件的时间执行简单的算术运算。例如,您可能需要知道文件后 30 天。执行 anarithmetic 文件时,您需要将转换 FILETIME 为四字 (64 位整数),执行算术运算,并再将 resultback 转换为文件。

假定 ft FILETIME 结构,它包含一个文件的创建时间,则下面的代码示例添加到时间 30 天:
   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 );				

设置文件时间

可以使用 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.   );				
此功能允许您修改创建、 上次访问时间,以及上次写入 timeswithout 更改文件的内容。若要使用此功能,musthave 对打开的文件的句柄。此文件句柄可以从 acall 到 CreateFile() 或 OpenFile()。该文件必须是打开 withGENERIC_WRITE 访问。已经设置了文件的时间后,您的 shouldrelease 文件处理通过调用 CloseHandle()。

假定 szFilename 是一个有效的文件名和 ft FILETIME 结构,您执行以下示例代码将该文件的创建日期设置为在 ft timecontained:
   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);   }				

显示文件的时间

文件时间基于协调通用时间 (UTC)。在英国的格林威治松散定义为当前的日期和时间基于 UTC 的 timeis。您很可能希望显示文件时,根据本地时间 (即日期和您所在时区的时间)。托多这一点,您可以使用 FileTimeToLocalFileTime(),如下所示:
   BOOL FileTimeToLocalFileTime(     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.     LPFILETIME lpLocalFileTime   // Pointer to converted file time.   );
请注意此函数使用当前设置的时区 anddaylight,从而节省时间。因此,如果它是夏时制,thisfunction 会考虑夏时制,即使您要转换的时间是标准时间。

若要有意义的方式显示文件时,首先需要将按如下方式使用 FileTimeToSystemTime() 系统时间转换 itto:
   BOOL FileTimeToSystemTime(     CONST FILETIME *lpFileTime, // Pointer to file time to convert.     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive   );                            // system time.				
SYSTEMTIME 结构表示的日期和时间使用月、 日、 年、 工作日、 小时、 分钟、 秒、 andmillisecond individualmembers。

也是可取的格式 consistentwith 为系统选择的当前区域中显示的日期和时间。你可以通过 usingGetDateFormat() 和 GetTimeFormat(),如下所示:
   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.   );				
通过将 LOCALE_USER_DEFAULT 作为第一个参数传递给这些函数,您可以告诉他们要设置传递的日期/时间格式 defaultformat 根据当前区域设置。在这种情况下,您可以为 thelpFormat 参数传递 NULL。

假定 FILETIME 结构,它包含一个 UTC 值英尺,followingsample 代码将打印存储在 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 );				

警告:本文已自动翻译

属性

文章 ID:188768 - 上次审阅时间:02/09/2014 19:16:00 - 修订版本: 5.0

Microsoft Win32 Application Programming Interface

  • kbapi kbdatetime kbfileio kbinfo kbkernbase kbmt KB188768 KbMtzh
反馈