รายละเอียด: การทำงานกับโครงสร้างของ FILETIME

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 188768 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

เวลาที่แฟ้มแสดงถึงการระบุวันและเวลาที่กำหนดให้แฟ้มถูก ล่าสร้าง เข้าถึงได้ หรือเขียนครั้งสุดท้าย ไป เวลาที่แฟ้มถูกเก็บไว้ในตัว โครงสร้างของ FILETIME โครงสร้างนี้จะใช้กับการเรียกใช้ Win32 API ต่าง ๆ

ข้อมูลเพิ่มเติม

จำนวน 100 nanosecond ช่วงการแสดงถึงโครงสร้างของ FILETIME ตั้งแต่ 1 มกราคม 1601 โครงสร้างประกอบด้วยค่า 32 บิตที่สองที่ รวมกับแบบฟอร์มค่า 64 บิตที่เดียว
   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
โปรดสังเกตว่า โครงสร้างของ FILETIME จะขึ้นอยู่กับช่วงเวลา 100 nanosecond ดังกล่าว มีประโยชน์มากในการกำหนดสัญลักษณ์ต่อไปนี้เมื่อทำงานกับแฟ้มครั้ง ตัวอย่างเช่น:
   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

ทำ Arithmetics กับเวลาของแฟ้ม

มักจำเป็นในการดำเนินการทางเลขคณิตของการแชร์แฟ้มครั้ง สำหรับ ตัวอย่าง คุณอาจจำเป็นต้องทราบเมื่อแฟ้มอยู่ 30 วันเก่า เมื่อต้องการดำเนินการ เลขคณิตในเวลาที่แฟ้ม คุณจำเป็นต้องแปลง FILETIME เป็น quadword ทำการคำนวณเลขคณิต (แบบ 64 บิต integer), และผลลัพธ์ที่แปลงแล้ว กลับไป FILETIME

สันนิษฐานว่า 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.
   );
				
ฟังก์ชันนี้ช่วยให้คุณสามารถปรับเปลี่ยนการสร้าง สุดท้าย access และเขียนครั้งล่าสุด โดยไม่มีการเปลี่ยนแปลงเนื้อหาของแฟ้ม เมื่อต้องการใช้ฟังก์ชันนี้ คุณต้อง มีหมายเลขการอ้างอิงเพื่อเปิดแฟ้ม หมายเลขอ้างอิงแฟ้มนี้สามารถได้รับจากการ เรียกไปยัง CreateFile() หรือ OpenFile() ต้องเปิดแฟ้มด้วย การเข้าถึง GENERIC_WRITE หลังจากที่ถูกกำหนด ระยะเวลาของแฟ้มคุณควร ปล่อยแฟ้มหมายเลขอ้างอิงผ่านการเรียกไปยัง CloseHandle()

สันนิษฐานว่า szFilename คือ ชื่อแฟ้มที่ถูกต้อง และ ft คือ โครงสร้างแบบ FILETIME, ต่อโค้ดตัวอย่างวันสร้างสำหรับแฟ้มที่เป็นตั้งเวลา มีอยู่ใน 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);
   }
				

แสดงเวลาของแฟ้ม

เวลาแฟ้มจะขึ้นอยู่กับรูปแบบเวลามาตรฐาน (UTC) เวลาตามเวลา UTC loosely กำหนดเป็นวันปัจจุบันและวันเวลาในของกรีนิช อังกฤษ คุณมักจะต้องการที่จะแสดงเวลาของแฟ้มเกี่ยวข้องกับ เวลาท้องถิ่น (นั่นคือ วันและเวลาของวันสำหรับโซนเวลาของคุณ) เมื่อต้องการ ทำเช่นนี้ คุณสามารถใช้ FileTimeToLocalFileTime() เป็นดังนี้:
   BOOL FileTimeToLocalFileTime(
     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.
     LPFILETIME lpLocalFileTime   // Pointer to converted file time.
   );
หมายเหตุว่า ฟังก์ชันนี้ใช้การตั้งค่าปัจจุบันสำหรับโซนเวลา และ เวลาตามฤดูกาล ดังนั้น ถ้าเป็นฤดูกาล นี้ ฟังก์ชันจะมีการปรับเวลาตามฤดูกาลลงในบัญชี แม้ว่าเวลาคุณ ถูกแปลงเป็นเวลามาตรฐาน

เมื่อแสดงเวลาของแฟ้มในลักษณะที่มีความหมาย คุณต้องการแปลง ถึงเวลาของระบบโดยใช้ FileTimeToSystemTime() เป็นดังนี้:
   BOOL FileTimeToSystemTime(
     CONST FILETIME *lpFileTime, // Pointer to file time to convert.
     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive
   );                            // system time.
				
โครงสร้าง SYSTEMTIME หมายถึงวันและเวลาที่ใช้แต่ละ สมาชิกเดือน วันที่ ปี วันทำงาน ชั่วโมง นาที วินาที และ millisecond

มีดีกว่าที่จะแสดงวันและเวลาในรูปแบบที่สอดคล้องกัน กับตำแหน่งกระทำการปัจจุบันที่เลือกสำหรับระบบ คุณสามารถทำได้ โดยการใช้ GetDateFormat() และ 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 เป็นพารามิเตอร์แรกไปยังฟังก์ชันเหล่านี้ คุณบอกให้พวกเขาส่งผ่านวัน / เวลาตามค่าเริ่มต้นการจัดรูปแบบ รูปแบบสำหรับตำแหน่งที่ตั้งปัจจุบัน ในกรณีนี้ คุณสามารถส่งผ่านค่า NULL สำหรับ พารามิเตอร์การ lpFormat

Assuming ft คือ โครงสร้างแบบ FILETIME ที่ประกอบด้วยเวลา UTC ค่าตัว ดังนี้ โค้ดตัวอย่างพิมพ์วันจัดเก็บไว้ใน 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 );
				

คุณสมบัติ

หมายเลขบทความ (Article ID): 188768 - รีวิวครั้งสุดท้าย: 28 มกราคม 2554 - Revision: 2.0
ใช้กับ
  • Microsoft Win32 Application Programming Interface เมื่อใช้กับ:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Keywords: 
kbapi kbdatetime kbfileio kbinfo kbkernbase kbmt KB188768 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:188768

ให้ข้อเสนอแนะ

 

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