BILGI: FILETIME yapısı ile çalışma

Makale çevirileri Makale çevirileri
Makale numarası: 188768 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Dosya bir kez, belirli bir dosya oluşturulduğu, son erişildiği veya en son yazılan zaman ve belirli bir tarihi temsil eder. Dosya saati FILETIME bir yapıda saklanır. Bu yapı, çeşitli Win32 API çağrısı ile kullanılır.

Daha fazla bilgi

FILETIME yapısı, 1 Ocak 1601 bu yana, 100 nanosecond aralıkları sayısını gösterir. Yapısı, tek bir 64-bit değeri oluşturmak için iki 32-bit değeri oluşur.
   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
100 Nanosecond aralıkları üzerinde FILETIME yapısını temel alan unutmayın. Dosya süreleri çalışırken aşağıdaki simgeleri tanımlamak yararlıdır. Örneğin:
   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

Dosya zamanlarını ile Arithmetics gerçekleştirme

Genellikle, bir basit aritmetik dosya süreleri gerçekleştirmek gereklidir. Örneğin, 30 gün içinde erişilenlerdir bir dosya olduğunu bilmeniz gerekebilir. Dosya saati bir aritmetik gerçekleştirmek için <a0></a0>, bir quadword (64-bit bir tamsayı), the FILETIME dönüştürme aritmetik gerçekleştirmek ve sonra sonucu için bir FILETIME geri dönüştürün. gerekir.

Ft dosyasının oluşturulma saati içeren bir FILETIME yapıdır varsayarak, aşağıdaki örnek kodu 30 gün için zaman ekler:
   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 );
				

Dosya zamanlarını ayarlama

SetFileTime() işlevini kullanarak bir dosya için dosya saatleri ayarlayabilirsiniz.
   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.
   );
				
Bu işlevi oluşturma değiştirme erişimi son ve dosya içeriğini değiştirmeden, son kez yazma sağlar. Bu işlevi kullanmak için <a0></a0>, açık olan dosyaya bir tanıtıcı olmalıdır. Bu dosya tanıtıcısı, CreateFile() veya OpenFile() çağrısı tarafından alınabilir. Dosyayı GENERIC_WRITE erişimi ile açılmalıdır. Dosya saatleri ayarladıktan sonra bir ça?r? CloseHandle() aracılığıyla dosya tanıtıcısını serbest.

Geçerli bir dosya adı assuming szFilename olan ve ft FILETIME bir yapıdır, aşağıdaki örnek kodu dosyanın oluşturma tarihini ft içerdiği zaman ayarlar:
   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);
   }
				

Dosya zamanlarını görüntüleme

Dosya saati, eşgüdümlü evrensel saat (UTC) temel alır. Zaman UTC tabanlı gevşek geçerli tarih ve saat Greenwich, ingiltere ' tanımlanır. Büyük olasılıkla dosya saati (diğer bir deyişle, tarih ve saat için sizin saat diliminizde) yerel saatine göre görüntülemek istersiniz. Bunu yapmak için FileTimeToLocalFileTime() aşağıdaki gibi kullanabilirsiniz:
   BOOL FileTimeToLocalFileTime(
     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.
     LPFILETIME lpLocalFileTime   // Pointer to converted file time.
   );
Not, bu işlev gün ışığından yararlanma saati ve saat dilimi için geçerli ayarları kullanır. Gün ışığından yararlanma saati ise, standart zaman dönüştürdüğünüz zaman olsa bile, bu nedenle, bu işlevi gün ışığından yararlanma saati, dikkate.

Dosya saati anlamlı bir şekilde görüntülemek için <a0></a0>, önce FileTimeToSystemTime() gibi kullanarak bir sistem saatini dönüştürülebilmesi gerekir:
   BOOL FileTimeToSystemTime(
     CONST FILETIME *lpFileTime, // Pointer to file time to convert.
     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive
   );                            // system time.
				
SYSTEMTIME yapısının bir tarih ve saat, ay, gün, yıl, hafta içi günü, saat, dakika, saniye ve milisaniye için tek tek üyelere kullanarak gösterir.

Ayrıca tarih ve saati geçerli değerini sistemi için tutarlı bir biçimde görüntülemek için tercih edilir. GetDateFormat() ve GetTimeFormat() gibi kullanarak bunu yapabilirsiniz:
   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 ilk parametre olarak bu işlevler için geçirme ölçütü, geçirilen tarih/saat varsayılan biçimine göre yerel biçimlendirilecek söyleyin. Bu durumda NULL lpFormat parametreleri geçirebilirsiniz.

Ft UTC değer içeren bir FILETIME yapıdır varsayarak, aşağıdaki örnek kodu ft içinde depolanan tarihi yazdırır:
   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 );
				

Özellikler

Makale numarası: 188768 - Last Review: 23 Ocak 2007 Salı - Gözden geçirme: 3.3
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Win32 Uygulama Programlama Arabirimi, Ne zaman ne ile kullanilir:
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Anahtar Kelimeler: 
kbmt kbapi kbdatetime kbfileio kbinfo kbkernbase KB188768 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:188768

Geri Bildirim Ver

 

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