2015-04-01 34 views
0

我只是想創建或修改文件的時間,並將其與系統時間進行比較。獲取文件創建或修改時間?

if (fileExtensions[i] == restoken && lmdCheck.GetCheck() == true) 
{ 
    testbox3.AddString(allFiles[i]); 
    CFileStatus status; 
    CFile cfile; 

    //cfile.Open(allFiles[i],NULL,NULL); 
    cfile.Open(allFiles[i], CFile::modeRead | CFile::modeWrite); 

    CTime t = CTime::GetCurrentTime(); 
    TRACE(t.Format(L"%X\n")); 

    SYSTEMTIME SystemTime; 
    //::GetSystemTime(&SystemTime); 
    ::GetLocalTime(&SystemTime); 
    CTime SystemT(SystemTime); 
    TRACE(SystemT.Format(L"%X\n")); 
    ULONGLONG dwNewLength = 10000; 
    cfile.SetLength(dwNewLength); 

    if (cfile.GetStatus(status)) 
    { 
     if (status.m_ctime < SystemTime) 
     { 
      cfile.Close(); 
      CFile::Remove(allFiles[i]); 
     } 
    } 
} 

並刪除那些少於系統時間的文件。請幫忙?

+1

I.e.刪除所有? – IInspectable 2015-04-01 03:00:18

回答

0

這將文件的FILETIME比較當前SYSTEMTIME

BOOL get_finddata(const TCHAR *filename, WIN32_FIND_DATA &data) 
{ 
    if (!filename) return FALSE; 
    HANDLE h = FindFirstFile(filename, &data); 
    if (h == INVALID_HANDLE_VALUE) 
     return FALSE; 
    FindClose(h); 
    return TRUE; 
} 

void change_filetime(FILETIME &ft, int sec) 
{ 
    ULONGLONG temp = (((ULONGLONG)ft.dwHighDateTime) << 32) + ft.dwLowDateTime; 
    temp += sec * __int64(10000000);//100-nanosecond intervals 
    ft.dwLowDateTime = (DWORD)(temp & 0xFFFFFFFF); 
    ft.dwHighDateTime = (DWORD)(temp >> 32); 
} 

void checkfor_older_files(const TCHAR *filename) 
{ 
    WIN32_FIND_DATA finddata; 
    if (!get_finddata(filename, finddata)) return; 
    //finddata.ftCreationTime; 
    //finddata.ftLastWriteTime; 
    //finddata.ftLastAccessTime; 

    SYSTEMTIME st; 
    GetSystemTime(&st); 

    FILETIME comparetime; 
    SystemTimeToFileTime(&st, &comparetime); 

    //change comparetime, for example, get files older than 30 minutes 
    change_filetime(comparetime, -30 * 60); 

    if (CompareFileTime(&finddata.ftCreationTime, &comparetime) < 0) 
     OutputDebugString(L"older file\n"); 
    else 
     OutputDebugString(L"not old\n"); 
} 
1

對不起你們我的錯誤。我不想要系統時間,我想要數據和時間選擇器數據。 我用這段代碼解決了我的問題。

for (int i = 0; i < allFiles.GetSize(); i++) 
    { 
     GetFileExt(allFiles[i]); 


     CString str, restoken; 
     fileExt.GetWindowText(str); 

     int curPos = 0; 
     restoken = str.Tokenize(_T(" "), curPos); 

     while (restoken != _T("")) 
     { 
      textBox2.AddString(restoken); 
      int a = fileExtensions.GetSize(); 

      if (fileExtensions[i] == restoken && lmdCheck.GetCheck() == true) 
      { 
       testbox3.AddString(allFiles[i]); 
       CFileStatus status; 
       CFile cfile; 

       cfile.Open(allFiles[i], CFile::modeRead | CFile::modeWrite); 

       if (cfile.GetStatus(status)) 
       { 

        CTime variable, clDate; 
        lmdDate.GetTime(clDate); 

        if (status.m_mtime < clDate) 
        { 
         cfile.Close(); 
         CFile::Remove(allFiles[i]); 
        } 
       } 
      } 

      restoken = str.Tokenize(_T(" "), curPos); 
     } 

再見,謝謝各位朋友。

+2

請記住,文件的時間戳以UTC表示,但DTP控件的時間戳用本地時間表示。 – 2015-04-01 06:06:15

相關問題