3

ディレクトリ内のすべてのファイルのファイル名でベクトルを埋める C++ 関数を書きたいと思います。さらに、このベクターをファイルの最終変更時刻順に並べたいと思います。

boost:: ファイルシステムを使用して、ディレクトリ内のすべてのファイルを読み取り、それをベクターに渡すことができますが、これらはファイル名によってベクターにロードされ、ファイルを stat してソートを実行しますが、これはあまり効率的ではありません。

これを行う簡単な方法を知っている人はいますか?たとえば、ls -lhctr はほぼ瞬時に実行できるため、C++ は大きなディレクトリに対してもこれを非常に迅速に実行できるはずです。

可能であれば、ミリ秒未満の解像度も望んでいます。

4

4 に答える 4

2

多分map/multimap<std::time_t/dt::ptime, std::string/fs::path>

于 2012-07-06T19:51:01.797 に答える
2

Boost.Filesystem を使用してディレクトリを反復処理し、last_write_time()各ファイルを呼び出すことができます。

次に、呼び出しの結果をキーとして使用して、ファイル名をstd::multimapに格納します。last_write_timeそうすれば、コンテナへの挿入時にソートが自動的に行われます。

于 2012-07-06T19:54:07.040 に答える
0

Qtのフレームワーク内に、その情報を提供するQFileInfoクラスがあることを私は知っています。http://doc.qt.nokia.com/4.7-snapshot/qfileinfo.html

私はブーストに精通していませんが、これは同様に機能するはずだと思います:http ://www.boost.org/doc/libs/1_32_0/libs/filesystem/doc/operations.htm#last_write_time

于 2012-07-06T19:53:05.370 に答える
0

私は偉大な C++ system() の戦いを開始するつもりはありませんが、「ls -lhctr」はほとんどすぐに答えを返すと言いましたが、system() 関数を使用してみませんか? 試す:

system("ls -lhctr > out.txt");

そして、fstream ヘッダーを使用してそのデータを getline() しますか?

もちろん、system() を使用すると、このソリューションが他の OS に移植できないことが保証されますが、いずれにせよ、それを気にする必要はないかもしれません。

于 2012-07-06T20:22:32.020 に答える