WindowsAPI/Reference2016. 10. 13. 01:35
요약
파일 시간은 파일이 생성되었거나 마지막으로 접근한, 혹은 마지막으로 쓰여진 특정 날짜와 시간을 나타냅니다. 파일 시간은 FILETIME 구조체에 저장됩니다. 이 구조는 다양 한 Win32 API 호출에 사용 됩니다.
자세한 내용
FILETIME 구조 1601 년 1 월 1 일 이후로 100 나노초 간격의 수를 나타냅니다. 구조를 단일 64 비트 값을 결합 하는 두 개의 32 비트 값으로 구성 됩니다.

   typedef struct _FILETIME {
     DWORD dwLowDateTime;
     DWORD dwHighDateTime;
   } FILETIME;
				
100 나노초 간격 기반 FILETIME 구조를 참고 합니다. 파일 시간을 사용 하 여 작업할 때 다음 기호를 정의 하는 것이 좋습니다. 예를 들어:

   #define _SECOND ((int64) 10000000)
   #define _MINUTE (60 * _SECOND)
   #define _HOUR   (60 * _MINUTE)
   #define _DAY    (24 * _HOUR)
				

Arithmetics 파일 시간을 사용 하 여 수행합니다.

필요 파일 시간이 간단한 산술 연산을 수행 하는 경우가 많습니다. 예를 들어, 파일을 이전 30 일 때 알아야 할 수도 있습니다. 파일 시간에 산술을 수행하려면, FILETIME을 쿼드 워드(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 올바른 파일 이름을 하며 FILETIME 구조가 ft, 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 기반 시간에 그리니치, 영국 현재 날짜 및 시간으로 느슨하게 정의 됩니다. 대부분의 경우 현지 시간 (즉, 날짜 및 표준 시간대의 시간)에 대 한 파일 시간을 표시 합니다. 이렇게 하려면 다음과 같이 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 구조를 나타냅니다. 

또한 시스템에 대해 선택한 현재 로케일에 일관 된 형식으로 날짜와 시간을 표시 하는 것이 좋습니다.

   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 첫 번째 매개 변수로이 함수에 전달 하 여 알려 전달 된 날짜/시간 기본 형식에 따라 현재 로케일에 대 한 서식을 지정 합니다. 

Ft는 UTC 값을 포함 하는 FILETIME 구조를 가정 하 고 다음 샘플 코드 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 );
				


'WindowsAPI > Reference' 카테고리의 다른 글

2. Windef.h  (0) 2016.10.13
Posted by 멜데스