ИНФОРМАЦИЯ: Работа с структуру FILETIME

Переводы статьи Переводы статьи
Код статьи: 188768 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

Представляет файл время определенной даты и времени, с которой данный файл был созданный, последнего доступа или последней операции записи. Время файл хранится в Структуру FILETIME. Эта структура используется для различных вызовов Win32 API.

Дополнительная информация

Структуру FILETIME представляет количество 100-наносекундных интервалов с 1 января 1601 г. Структура состоит из двух 32-разрядных значений, будут объединены одной 64-разрядное значение.
   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
Обратите внимание, что структуру FILETIME основана на 100-наносекундных интервалов. Он может оказаться полезным для определения следующих символов при работе со времени файлов. Например:
   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

Выполнение Arithmetics со времени файлов

Часто возникает необходимость выполнения простых арифметических действий над времени файлов. Для пример, необходимо знать, когда файл 30 дней. Для выполнения арифметические операции на время файла, необходимо преобразовать FILETIME к quadword (64-разрядное целое число), выполнять арифметические операции, а затем преобразовать результат к началу 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.
   );
				
Эта функция позволяет изменять создания, последнего доступа и время последней записи без изменения содержимого файла. Для использования этой функции необходимо иметь дескриптор открытого файла. Этот дескриптор может быть получено от вызов метода 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 свободно определяется как текущая дата и время суток в Greenwich, Англия. Скорее всего нужно отображать файл по отношению к местное время (т.е., Дата и время для часового пояса). Для сделать это, 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, даты и времени с использованием отдельных члены, месяц, день, год, день недели, час, минуту, секунду, и миллисекунды.

Рекомендуется использовать для отображения даты и времени в формате согласованной с текущей национальной настройки, выбранные для системы. Это можно сделать с помощью 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.

Предполагается 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 );
				

Свойства

Код статьи: 188768 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Win32 Application Programming Interface на следующих платформах
    • Microsoft Windows 98 Standard Edition
    • операционная система Microsoft Windows Millennium Edition
Ключевые слова: 
kbapi kbdatetime kbfileio kbinfo kbkernbase kbmt KB188768 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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