2010-11-26 15 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-a-specific-time) – halfer

答えて

48

ほとんどのオペレーティングシステムは、特定の順序でディレクトリエントリを返しません。それらを並べ替える場合は(人間のユーザに結果を表示する場合はおそらく)、別のパスでそれを行う必要があります。

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)); 
    } 
    } 
} 

あなたはその後、result_setを反復処理することができ、およびマッピングされたboost::filesystem::pathエントリは昇順になります:あなたはそれを行うことが一つの方法は、std::multimapにそのようなものをエントリを挿入することです。

+0

ファイルが同じ秒で作成/変更された場合、 'std :: time_t'が2番目のものと正確であるため、それらの順序は保証されません。 – 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

関連する問題