INFO: Bekerja dengan struktur FILETIME

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 188768 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Waktu file yang mewakili tanggal tertentu dan waktu di mana suatu file terakhir dibuat, diakses, atau terakhir ditulis untuk. Waktu berkas yang disimpan dalam FILETIME struktur. Struktur ini digunakan dengan berbagai Win32 API panggilan.

INFORMASI LEBIH LANJUT

Struktur FILETIME mewakili jumlah interval 100-nanosecond sejak 1 Januari 1601. Struktur yang terdiri dari dua nilai 32-bit yang bergabung untuk membentuk nilai 64-bit tunggal.
   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
Perhatikan bahwa struktur FILETIME didasarkan pada interval 100-nanosecond. Itu ini membantu untuk menentukan simbol-simbol berikut ketika bekerja dengan file kali. Misalnya:
   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

Melakukan Arithmetics dengan File kali

Hal ini sering diperlukan untuk melakukan aritmatika sederhana pada berkas kali. Untuk contoh, Anda mungkin perlu tahu kapan file 30 hari tua. Untuk melakukan aritmatika pada waktu file, Anda perlu mengkonversi FILETIME untuk quadword (64-bit integer), melakukan aritmatika, dan kemudian mengubah hasil kembali ke FILETIME.

Dengan asumsi kaki adalah struktur FILETIME yang mengandung waktu pembuatan file, dalam kode contoh berikut menambah 30 hari waktu:
   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 );
				

Pengaturan File kali

Anda dapat mengatur file kali file dengan menggunakan fungsi 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.
   );
				
Fungsi ini memungkinkan Anda mengubah penciptaan, terakhir akses, dan terakhir menulis kali tanpa mengubah isi file. Untuk menggunakan fungsi ini, Anda harus harus menangani berkas terbuka. Menangani file ini dapat diperoleh dari Hubungi CreateFile() atau OpenFile(). Berkas harus dibuka dengan GENERIC_WRITE akses. Setelah kali file telah ditetapkan, Anda harus rilis menangani file melalui panggilan untuk CloseHandle().

Dengan asumsi szFilename adalah nama file yang sah dan kaki adalah struktur FILETIME, mengikuti contoh kode set tanggal penciptaan file untuk waktu terkandung dalam kaki:
   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);
   }
				

Menampilkan File kali

File waktu berdasarkan waktu universal terkoordinasi (UTC). UTC-berbasis waktu didefinisikan sebagai tanggal dan waktu Greenwich, Inggris. Anda akan paling mungkin ingin menampilkan waktu file sehubungan dengan waktu setempat (yaitu tanggal dan waktu untuk zona waktu Anda). Pada melakukan hal ini, Anda dapat menggunakan FileTimeToLocalFileTime() sebagai berikut:
   BOOL FileTimeToLocalFileTime(
     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.
     LPFILETIME lpLocalFileTime   // Pointer to converted file time.
   );
Catatan bahwa fungsi ini menggunakan pengaturan saat ini untuk zona waktu dan daylight saving time. Oleh karena itu, jika daylight saving time, ini fungsi akan memperhitungkan daylight saving time, bahkan jika waktu Anda yang mengubah adalah dalam waktu standar.

Untuk menampilkan waktu file dengan cara yang berarti, pertama Anda harus mengubahnya untuk waktu sistem yang menggunakan FileTimeToSystemTime() sebagai berikut:
   BOOL FileTimeToSystemTime(
     CONST FILETIME *lpFileTime, // Pointer to file time to convert.
     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive
   );                            // system time.
				
Struktur SYSTEMTIME mewakili tanggal dan waktu menggunakan individu anggota untuk bulan, hari, tahun, hari kerja, jam, menit, kedua, dan milidetik.

Hal ini juga baik untuk menampilkan tanggal dan waktu dalam format yang konsisten dengan lokal yang saat ini dipilih untuk sistem. Anda dapat melakukan ini dengan menggunakan GetDateFormat() dan GetTimeFormat() sebagai berikut:
   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.
   );
				
Dengan mengirimkan LOCALE_USER_DEFAULT sebagai parameter ke fungsi-fungsi ini, Anda memberitahu mereka untuk memformat tanggal/waktu berlalu menurut default format untuk lokal saat ini. Dalam kasus ini, Anda dapat melewati NULL lpFormat parameter.

Asumsi kaki adalah struktur FILETIME yang berisi nilai UTC, berikut contoh kode cetakan tanggal yang disimpan di kaki:
   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 );
				

Properti

ID Artikel: 188768 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Win32 Application Programming Interface, ketika digunakan dengan:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Kata kunci: 
kbapi kbdatetime kbfileio kbinfo kbkernbase kbmt KB188768 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:188768

Berikan Masukan

 

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