INFO: Práce se strukturou FILETIME

Překlady článku Překlady článku
ID článku: 188768 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Čas souboru představuje určité datum a čas, kdy byl daný soubor vytvořené, poslední přístup nebo poslední zápis do. Čas souboru uložena v Struktura FILETIME. Tato struktura se používá při různých volání rozhraní Win32 API.

Další informace

Struktura FILETIME představuje počet intervalů 100-nanosecond od 1. ledna 1601. Struktura se skládá ze dvou 32bitové hodnoty, společně tvoří jedinou hodnotu 64-bit.
   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
Všimněte si, že FILETIME struktura je založena na 100 nanosecond intervalech. Jeho je užitečné definovat následující symboly při práci s časy souboru. Například:
   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

Provádění aritmetická s časy souboru

Často je nezbytné provést jednoduché aritmetické na čas. Pro například budete muset vědět, kdy je soubor starší 30 dnů. Provádění aritmetický včas soubor, je nutné převést FILETIME quadword (celé 64-bit), provést aritmetický a výsledek převeďte na zpět na FILETIME.

Za předpokladu, že ft je FILETIME struktura obsahující čas vytvoření souboru, Následující ukázkový kód přidá na dobu 30 dnů:
   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 );
				

Čas nastavení

Časy souboru pro soubor, můžete nastavit pomocí funkce 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.
   );
				
Tato funkce umožňuje změnit vytváření, poslední přístup a posledního zápisu časy beze změny obsahu souboru. Chcete-li tuto funkci použít, musíte Máte popisovač k otevření souboru. Tento popisovač souboru lze získat z volání funkce CreateFile() nebo OpenFile(). Soubor musí být otevřen s Všeobecné_zápis přístup. Po nastavení času souboru, měli byste Uvolněte popisovač souboru pomocí volání CloseHandle().

Za předpokladu, že szFilename je platný název souboru a strukturu FILETIME ft Následující ukázkový kód nastaví datum vytvoření souboru na čas obsažené v 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);
   }
				

Zobrazení času souboru

Čas souboru je založen na koordinovaný světový čas (UTC). Založené na čase UTC čas aktuální datum a čas, kdy volně podle greenwichského, Anglie. Pravděpodobně chcete zobrazit čas souboru s ohledem na místní čas (datum a čas pro časové pásmo). K provést, můžete použít FileTimeToLocalFileTime() takto:
   BOOL FileTimeToLocalFileTime(
     CONST FILETIME *lpFileTime,  // Pointer to UTC file time to convert.
     LPFILETIME lpLocalFileTime   // Pointer to converted file time.
   );
Poznámka, že tato funkce použije aktuální nastavení časového pásma a letní čas. Proto, pokud je letní čas, to Funkce přihlédne letního času, i když čas je jsou převodu je standardní čas.

Chcete-li zobrazit čas souboru srozumitelným způsobem, musíte nejprve převést k systémovému času pomocí FileTimeToSystemTime() takto:
   BOOL FileTimeToSystemTime(
     CONST FILETIME *lpFileTime, // Pointer to file time to convert.
     LPSYSTEMTIME lpSystemTime   // Pointer to structure to receive
   );                            // system time.
				
Struktury SYSTEMTIME představuje datum a čas pomocí jednotlivých Členové, měsíc, den, rok, pracovní den, hodinu, minutu, druhý, a Milisekunda.

Je také vhodnější zobrazit datum a čas ve formátu, který je konzistentní aktuální národním prostředí vybraném v systému. To lze provést pomocí GetDateFormat() a GetTimeFormat() takto:
   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.
   );
				
Předáním LOCALE_USER_DEFAULT jako první parametr těchto funkcí, ověření pravosti je předaná datum a čas podle výchozí formátování Formát pro aktuální národní prostředí. V takovém případě můžete předat NULL Parametry lpFormat.

Za předpokladu ft je FILETIME struktura obsahující hodnotu UTC, následující Ukázkový kód Vytiskne data uložená v 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 );
				

Vlastnosti

ID článku: 188768 - Poslední aktualizace: 23. dubna 2011 - Revize: 5.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Win32 Application Programming Interface na těchto platformách
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Klíčová slova: 
kbapi kbdatetime kbfileio kbinfo kbkernbase kbmt KB188768 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:188768

Dejte nám zpětnou vazbu

 

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