Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Thông tin: Làm việc với cấu trúc FILETIME

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:188768
TÓM TẮT
Một thời gian tập tin đại diện cho các ngày cụ thể và thời gian mà tại đó một tập tin nhất địnhtạo, cuối truy cập, hoặc cuối bằng văn bản để. Một thời gian tập tin được lưu trữ trong mộtFILETIME cấu trúc. Cơ cấu này được sử dụng với nhiều cuộc gọi Win32 API.
THÔNG TIN THÊM
Cấu trúc FILETIME đại diện cho số lượng các khoảng 100-nanosecondtừ 1 tháng một 1601. Cấu trúc bao gồm hai 32-bit giá trị màkết hợp để tạo thành một giá trị duy nhất 64-bit.
   typedef struct _FILETIME {     DWORD dwLowDateTime;     DWORD dwHighDateTime;   } FILETIME;				
Lưu ý rằng cấu trúc FILETIME được dựa trên các khoảng 100-nanosecond. Nólà hữu ích để xác định các biểu tượng sau khi làm việc với tệp lần.Ví dụ:
   #define _SECOND ((int64) 10000000)   #define _MINUTE (60 * _SECOND)   #define _HOUR   (60 * _MINUTE)   #define _DAY    (24 * _HOUR)				

Thực hiện Arithmetics với tệp lần

Người ta thường cần thiết để thực hiện một số học đơn giản trên tệp lần. ChoVí dụ, bạn có thể cần phải biết khi một tập tin là 30 ngày tuổi. Để thực hiện mộtsố học về một thời gian tập tin, bạn cần phải chuyển đổi FILETIME để quadword một(một số nguyên 64-bit), thực hiện số học, và sau đó chuyển đổi kết quảQuay lại một FILETIME.

Giả sử ft là một cấu trúc FILETIME có thời gian sáng tạo của một tập tin,mẫu mã sau đây cho biết thêm 30 ngày để thời gian:
   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 );				

Thiết đặt tệp lần

Bạn có thể thiết lập các tệp lần cho một tập tin bằng cách sử dụng chức năng 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.   );				
Chức năng này cho phép bạn sửa đổi các sáng tạo, tác quyền truy cập và cuối viết lầnmà không thay đổi nội dung của tập tin. Sử dụng chức năng này, bạn phảicó một xử lý để mở tập tin. Xử lý tập tin này có thể được lấy từ mộtgọi CreateFile() hoặc OpenFile(). Tệp phải mở vớiTruy cập GENERIC_WRITE. Sau khi các lần tập tin đã được thiết lập, bạn nênphát hành xử lý tập tin thông qua một cuộc gọi đến CloseHandle().

Giả sử szFilename là một tên tệp hợp lệ và ft là một cấu trúc FILETIME, cácsau mẫu mã bộ ngày tạo cho các tập tin để thời gianchứa trong 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);   }				

Hiển thị các tệp lần

Trong thời gian tập tin dựa trên giờ phối hợp quốc tế (UTC). UTC dựa trên thời gianlỏng lẻo được định nghĩa như ngày hiện tại và thời gian trong ngày trong Greenwich,Anh. Bạn sẽ rất có thể muốn hiển thị thời gian tập tin vớilocal đó (có nghĩa là, ngày tháng và thời gian trong ngày cho múi giờ của bạn). Đểlàm điều này, bạn có thể sử dụng FileTimeToLocalFileTime() như sau:
   BOOL FileTimeToLocalFileTime(     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.     LPFILETIME lpLocalFileTime   // Pointer to converted file time.   );
Lưu ý rằng hàm này sử dụng các thiết đặt hiện thời cho múi giờ vàthời gian tiết kiệm ánh sáng ban ngày. Vì vậy, nếu nó là ánh sáng ban ngày tiết kiệm thời gian, điều nàychức năng sẽ mất thời gian tiết kiệm ánh sáng ban ngày vào tài khoản, ngay cả khi thời gian bạnđang chuyển đổi là trong thời gian tiêu chuẩn.

Để hiển thị thời gian tập tin một cách có ý nghĩa, trước tiên bạn cần để chuyển đổi nóđể một thời gian hệ thống bằng cách sử dụng FileTimeToSystemTime() như sau:
   BOOL FileTimeToSystemTime(     CONST FILETIME *lpFileTime, // Pointer to file time to convert.     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive   );                            // system time.				
Cấu trúc SYSTEMTIME đại diện cho một ngày và thời gian bằng cách sử dụng cá nhâncác thành viên cho tháng, ngày, năm, ngày trong tuần, giờ, phút, giây, vàmillisecond.

Nó cũng là thích hợp hơn để hiển thị ngày tháng và thời gian trong một định dạng phù hợpvới miền địa phương hiện tại được chọn cho hệ thống. Bạn có thể làm điều này bằng cách sử dụngGetDateFormat() và GetTimeFormat() như sau:
   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.   );				
Bằng cách đi qua LOCALE_USER_DEFAULT như tham số đầu tiên để các chức năng này,bạn nói với họ để định dạng thông qua ngày/giờ theo để mặc địnhđịnh dạng cho miền địa phương hiện tại. Trong trường hợp này, bạn có thể vượt qua NULL cáclpFormat tham số.

Giả ft là một cấu trúc FILETIME có chứa một giá trị UTC, sau đâymẫu mã in ngày lưu trữ trong 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 );				

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 188768 - Xem lại Lần cuối: 08/20/2011 08:44:00 - Bản sửa đổi: 2.0

Microsoft Win32 Application Programming Interface

  • kbapi kbdatetime kbfileio kbinfo kbkernbase kbmt KB188768 KbMtvi
Phản hồi