FILETIME 结构使用信息:

文章翻译 文章翻译
文章编号: 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 );
				

属性

文章编号: 188768 - 最后修改: 2014年2月9日 - 修订: 5.0
这篇文章中的信息适用于:
  • Microsoft Win32 Application Programming Interface?当用于
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
关键字:?
kbapi kbdatetime kbfileio kbinfo kbkernbase kbmt KB188768 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 188768
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

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