2011-10-03 5 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éric Hamidi)가 정확합니다. C++에는 주로 동적/스크립팅 언어에서 발견되는 "문자열 보간법"이 없습니다. –

답변

2

"C : \ mapper \"문자열을 iter-> cFileName에있는 문자로 연결해야합니다. 가장 간단한 방법은 std :: string 클래스를 사용하는 것입니다. 결과이 같은 보일 것이다,

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

이것은 당신이 당신의 문자열의 유니 코드 인코딩을 사용하지 않는 가정을, 그렇지 않으면 당신은 표준 : wstring의를 사용해야합니다. 이 수업을 사용하려면 파일 상단에

을 포함해야합니다.

+0

감사합니다. 파일을 지우는 것이 그렇게 관여 될지 몰랐습니다! :)하지만 지금은 더 잘 알아야합니다. 도움이 대단히 감사합니다! 좋은 하루 되세요. –

관련 문제