2011-10-03 75 views
-1

我有一個代碼可以找到小於20秒的文件。這是找到他們,但我不能讓他們刪除。我正在使用remove()。我嘗試使用刪除通配符,但沒有運氣。它必須與語法有關。任何幫助表示讚賞。謝謝。文件沒有刪除

using namespace std; 
typedef vector<WIN32_FIND_DATA> tFoundFilesVector; 
std::wstring LastWriteTime; 
int getFileList(const char * filespec, tFoundFilesVector &foundFiles) 
{ 
    WIN32_FIND_DATA findData; 
    HANDLE h; 
    int validResult=true; 

    int numFoundFiles = 0; 
    h = FindFirstFile((LPCSTR)filespec, &findData); 
    if (h == INVALID_HANDLE_VALUE) 
     return 0; 

    while (validResult) 
    { 
     numFoundFiles++; 
     foundFiles.push_back(findData); 
     validResult = FindNextFile(h, &findData); 
    } 
    return numFoundFiles; 
} 

void showFileAge(tFoundFilesVector &fileList) 
{ 
    unsigned _int64 fileTime, curTime, age; 
    tFoundFilesVector::iterator iter; 
    FILETIME ftNow; 
    CoFileTimeNow(&ftNow); 
      curTime = ((_int64) ftNow.dwHighDateTime << 32) + ftNow.dwLowDateTime; 

      for (iter=fileList.begin(); iter<fileList.end(); iter++) 
    { 
     fileTime = ((_int64)iter->ftLastWriteTime.dwHighDateTime << 32) + iter- >ftLastWriteTime.dwLowDateTime; 

     age = curTime - fileTime; 
    if (age <= (_int64)200000000UL) 
    { 
     wcout << " Delete: '" <<endl; 
     wcout << "FILE: '" << iter->cFileName << "', AGE: " << (_int64)age/10000000UL << " seconds" << endl; 
     remove("C:\\mapper\\iter->cFileName"); 

     } 
     else 
     { 
     //wcout << " Quit: '" <<endl; 
     //return; 
    } 
     } 
} 

int main() 
{ 
    string fileSpec = "*.*"; 
    tFoundFilesVector foundFiles; 
    tFoundFilesVector::iterator iter; 

    int foundCount = 0; 

    getFileList("c:\\Mapper\\*.txt", foundFiles); 
    getFileList("c:\\Mapper\\*.jpg", foundFiles); 
    foundCount = foundFiles.size(); 
    if (foundCount) 
    { 
     wcout << "Found "<<foundCount<<" matching files.\n"; 
     showFileAge(foundFiles); 
    } 
    system("pause"); 
    return 0; 
} 
+6

你想用'remove(「C:\\ mapper \\ iter-> cFileName」)來實現什麼?這不可能工作。您應該從兩個字符串中構建文件的路徑。 –

+0

謝謝,我該怎麼做?我還是很新的! –

+0

FrédéricHamidi是正確的,C++沒有「字符串插值」,這是一個主要用於動態/腳本語言的功能。 –

回答

2

您需要將字符串「C:\ mapper \」與任何位於iter-> cFileName中的字符串連接起來。最簡單的方法是使用std :: string類。 結果會是這個樣子:

remove(string("c:\\mapper\\").append(string(iter->cFileName)).c_str()); 

這是假設你不使用你的字符串的Unicode編碼,否則,你需要使用std :: wstring的。要使用這些類,您還需要在文件頂部包含

#include <string> 

+0

謝謝!我不知道它會涉及刪除文件! :)但我現在應該更清楚。非常感謝幫助!祝你有美好的一天。 –