我想编写一个 C++ 函数,用目录中所有文件的文件名填充向量。此外,我希望这个向量按文件的最后修改时间排序。
我可以使用 boost:: filesystem 读取目录中的所有文件并将其传递给向量,但是这些文件会通过文件名加载到向量中,然后我对文件进行统计并执行一种效率不高的排序。
有谁知道一个快速的方法来做到这一点?例如, ls -lhctr 几乎可以立即执行此操作,因此 C++ 对于大型目录也应该能够非常快速地执行此操作。
如果可能的话,我也希望它具有亚毫秒级的分辨率。
也许map/multimap<std::time_t/dt::ptime, std::string/fs::path>
?
您可以使用 Boost.Filesystem 遍历目录,并调用last_write_time()
每个文件。
然后使用调用结果作为键将文件名存储在std::multimap中。last_write_time
这样,在插入容器时会自动进行排序。
我知道在 Qt 的框架内有一个 QFileInfo 类将提供该信息。http://doc.qt.nokia.com/4.7-snapshot/qfileinfo.html
我对 boost 不太熟悉,但我认为这应该类似: http: //www.boost.org/doc/libs/1_32_0/libs/filesystem/doc/operations.htm#last_write_time
我并不是要开始伟大的 C++ system() 战斗,但您提到“ls -lhctr”几乎会立即返回您的答案,那么为什么不使用 system() 函数呢?尝试:
system("ls -lhctr > out.txt");
And then use the fstream header to getline() that data?
Using system(), of course, guarantees that this solution won't be portable to other OSes, but you may not care about doing that anyway.