본문 바로가기
Study/MFC

FILETIME 구조체로 시간

by 뿡뿡대마왕 2011. 5. 2.
반응형
폴더내 파일을 읽어와 현재 시간으로 부터 이틀이 지났는지 확인해야 하는 일이 생겼다.
WIN32_FIND_DATA 구조체에서 ftCreationTime 을 확인하면 알수 있다.

typedef struct _WIN32_FIND_DATA {
  DWORD    dwFileAttributes;
  FILETIME ftCreationTime;
  FILETIME ftLastAccessTime;
  FILETIME ftLastWriteTime;
  DWORD    nFileSizeHigh;
  DWORD    nFileSizeLow;
  DWORD    dwReserved0;
  DWORD    dwReserved1;
  TCHAR    cFileName[MAX_PATH];
  TCHAR    cAlternateFileName[14];
} WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;

 

아래는 자료를 찾다가 누가 해놓은게 있어서 퍼왔다..

출처: http://cafe.naver.com/kcodeguru.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=993&

BOOL AfterTime(void)
{
    SYSTEMTIME     stm, convTime;
    FILETIME     ftm;
    LARGE_INTEGER     largeInt; 
    __int64 IN_WEEK = (__int64)10000000*60*60*24*7;
    __int64 IN_DAY  = (__int64)10000000*60*60*24;
    __int64 IN_HOUR = (__int64)10000000*60*60;
    __int64 IN_MIN  = (__int64)10000000*60;
    __int64 IN_SEC  = (__int64)10000000; 

    GetLocalTime(&stm); /* 현재 시간 구하기 */
    SystemTimeToFileTime(&stm, &ftm); /* SYSTEMTIME -> FILETIEM 변환 */

    memcpy(&largeInt, &ftm, sizeof(FILETIME));   /* FILETIME -> LARGE_INTEGER 변환 */ 
    largeInt.QuadPart += IN_MIN * 30;            /* 30분 더하기 */  
    memcpy(&ftm, &largeInt, sizeof(FILETIME));   /* LARGE_INTEGER -> FILETIME 변환 */  

    FileTimeToSystemTime(&ftm, &convTime); /* FILETIME -> SYSTEMTIME 변환 */

    RETAILMSG(TRUE,(TEXT("### Current Time - %02d:%02d:%02d:%02d\r\n"),
     stm.wHour, stm.wMinute, stm.wSecond, stm.wMilliseconds));
    RETAILMSG(TRUE,(TEXT("--> Convert Time - %02d:%02d:%02d:%02d\r\n"),
     convTime.wHour, convTime.wMinute, convTime.wSecond, convTime.wMilliseconds));

    return TRUE;


 아래건 내가 위에걸 보고 참고해서 이틀 지났는지를 판단하는 소스이다.

BOOL SystemOptimization::Time_2DayCheck(FILETIME ftm)

{

SYSTEMTIME stm;

FILETIME current_time, File_time;

LARGE_INTEGER currentTime; 

File_time = ftm;

GetLocalTime(&stm); //! 현재 시간 구하기 

SystemTimeToFileTime(&stm, &current_time); //! SYSTEMTIME -> FILETIEM 변환 

memcpy(&currentTime, &current_time, sizeof(FILETIME)); //! FILETIME -> LARGE_INTEGER 변환 

currentTime.QuadPart -= IN_DAY * 2; //! 현재 시간에서 2일전 시간

memcpy(&current_time, &currentTime, sizeof(FILETIME)); //! LARGE_INTEGER -> FILETIME 변환 

  if(CompareFileTime(&current_time, &File_time) == 1) //! 현재시간에서 이틀을 뺀 이 더 클때(파일이 2틀전에 생성시에)

  {

  return TRUE;

  }

return FALSE;

}




반응형

댓글