2012-01-21 3 views
6

주어진 디렉토리에서 최종 수정/생성 된 파일을 어떻게 선택할 수 있는지 알고 싶습니다.디렉토리에서 마지막으로 수정 한 파일을 선택하십시오.

현재 XML이라는 디렉토리가 있는데 그 안에는 많은 XML 파일이 있습니다. 하지만 마지막으로 수정 한 파일 만 선택하고 싶습니다.

+1

아직 시도한 것은 무엇입니까? 이 문제에 대해 어떻게 생각하십니까? 질문을 수정하십시오. – ScarletAmaranth

+1

어떤 OS입니까? 이식 가능한 코드가 필요합니까? –

+0

나는 윈도우 플랫폼에서 일하고있다 .. –

답변

4

다음 함수를 사용하여 폴더 내의 모든 항목을 나열합니다. 모든 파일을 문자열 벡터에 씁니다 만, 변경할 수 있습니다.

bool ListContents (vector<string>& dest, string dir, string filter, bool recursively) 
{ 
    WIN32_FIND_DATAA ffd; 
    HANDLE hFind = INVALID_HANDLE_VALUE; 
    DWORD dwError = 0; 

    // Prepare string 
    if (dir.back() != '\\') dir += "\\"; 

    // Safety check 
    if (dir.length() >= MAX_PATH) { 
     Error("Cannot open folder %s: path too long", dir.c_str()); 
     return false; 
    } 

    // First entry in directory 
    hFind = FindFirstFileA((dir + filter).c_str(), &ffd); 

    if (hFind == INVALID_HANDLE_VALUE) { 
     Error("Cannot open folder in folder %s: error accessing first entry.", dir.c_str()); 
     return false; 
    } 

    // List files in directory 
    do { 
     // Ignore . and .. folders, they cause stack overflow 
     if (strcmp(ffd.cFileName, ".") == 0) continue; 
     if (strcmp(ffd.cFileName, "..") == 0) continue; 

     // Is directory? 
     if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
     { 
      // Go inside recursively 
      if (recursively) 
       ListContents(dest, dir + ffd.cFileName, filter, recursively, content_type); 
     } 

     // Add file to our list 
     else dest.push_back(dir + ffd.cFileName); 

    } while (FindNextFileA(hFind, &ffd)); 

    // Get last error 
    dwError = GetLastError(); 
    if (dwError != ERROR_NO_MORE_FILES) { 
     Error("Error reading file list in folder %s.", dir.c_str()); 
     return false; 
    } 

    return true; 
} 

은 무엇 당신이해야 할 것은 최신 파일을 찾을 수에 적응이다

(WINDOWS.H를 포함하는 것을 잊지 마세요). ffd 구조체 (WIN32_FIND_DATAA 데이터 형식)에는 ftCreationTime, ftLastAccessTime 및 ftLastWriteTime이 포함되어 있으므로 최신 파일을 찾을 수 있습니다. 이 멤버는 FILETIME 구조이며 여기에서 설명서를 찾을 수 있습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284%28v=vs.85%29.aspx

1

FindFirstFile과 FindNextFile을 사용할 수 있습니다. 크기와 수정 시간과 같은 파일을 설명하는 구조체를 제공합니다.

+0

Windows 전용 솔루션이라는 것을 추가 할 수 있습니다. – pmr

0

부스트. 파일 시스템은 last_write_time을 제공합니다. 이 파일을 사용하여 directory에있는 파일을 정렬 할 수 있습니다. Boost.Filesystem 및 (부스트) 일반적으로 C + +에 대한 약간의 협박 수 있습니다 - 새로운 코너 당신이 먼저 귀하의 운영 체제에 대한 솔루션을 확인하는 것이 좋습니다.

관련 문제