2010-11-26 4 views
25

폴더의 파일 목록이 필요하며 파일이 수정 된 날짜 시간으로 정렬됩니다.파일이 수정 된 날짜 시간으로 정렬 된 폴더의 파일 목록을 얻는 방법

Linux에서 C++로 작업 중이므로 Boost 라이브러리가 지원됩니다.

아무에게도 이것을 구현하는 방법에 대한 코드 샘플을 제공해 주시겠습니까?

+2

다른 질문과 어떻게 다른가요? http://stackoverflow.com/questions/4279164/cboost-file-system-to-return-a-list-of-files-older-than-a-specific- 시각? Nabulke는 올바른 방향으로 당신을 알려줄 답을 제공했습니다. 거기에서 파일을 벡터에 추가하고 정렬하기가 너무 어렵지 않습니다. – Ralf

+0

가능한 복제본 [C++ : 특정 시간보다 오래된 파일 목록을 반환하는 파일 시스템 향상] (https://stackoverflow.com/questions/4279164/cboost-file-system-to-return-a-list-of) -files-specific-than-specific-time-than-specific-time) – halfer

답변

48

대부분의 운영 체제는 특정 순서로 디렉토리 항목을 반환하지 않습니다. 그들을 분류하고 싶다면 (아마도 인간 사용자에게 결과를 보여 주어야 할 것입니다), 별도의 단계에서이를 수행해야합니다. 당신이 할 수있는 한 가지 방법은 지금처럼 std::multimap에 뭔가를 항목을 삽입하는 것입니다 : 당신은 다음 result_set을 반복 할 수 있으며, 매핑 된 boost::filesystem::path 항목이 오름차순으로 될 것입니다

namespace fs = boost::filesystem; 
fs::path someDir("/path/to/somewhere"); 
fs::directory_iterator end_iter; 

typedef std::multimap<std::time_t, fs::path> result_set_t; 
result_set_t result_set; 

if (fs::exists(someDir) && fs::is_directory(someDir)) 
{ 
    for(fs::directory_iterator dir_iter(someDir) ; dir_iter != end_iter ; ++dir_iter) 
    { 
    if (fs::is_regular_file(dir_iter->status())) 
    { 
     result_set.insert(result_set_t::value_type(fs::last_write_time(dir_iter->path()), *dir_iter)); 
    } 
    } 
} 

.

+0

파일이 동일한 초 내에 생성/수정되는 경우'std :: time_t '가 두 번째 파일만큼 정확하다는 점에서 그 순서가 보장되지 않는다는 점을 기억하십시오. – fduff

+2

http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#last_write_time에 유의하십시오. last_write_time은 경로가 상태가 아닙니다. fs :: last_write_time (dir_iter-> path()) – e271p314

+0

result_set.insert에 왼쪽 괄호가 누락되었습니다. – daramarak

관련 문제