我想编写一个C ++函数,用一个目录中所有文件的文件名填充向量。此外,我希望这个向量按文件的最后修改时间排序。
我可以使用boost :: filesystem读取目录中的所有文件并将其传递给向量,但是这些文件通过文件名加载到向量中然后我对文件进行了统计并执行了一个不是非常有效率。
有人知道快速的方法吗?例如,ls -lhctr几乎可以立即执行,因此C ++应该能够非常快速地为大型目录执行此操作。
如果可能的话,我也希望这能有亚毫秒的分辨率。
答案 0 :(得分:2)
也许map/multimap<std::time_t/dt::ptime, std::string/fs::path>
?
答案 1 :(得分:2)
您可以使用Boost.Filesystem迭代目录,并在每个文件上调用last_write_time()
。
然后使用last_write_time
调用的结果作为密钥将文件名存储在std::multimap中。这样排序就会在插入容器时自动完成。
答案 2 :(得分: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
答案 3 :(得分:0)
我不是故意要开始伟大的C ++系统()战斗,但你提到“ls -lhctr”几乎立即返回你的答案,那么为什么不使用system()函数呢?尝试:
system("ls -lhctr > out.txt");
然后使用fstream标头来getline()那个数据?
当然,使用system()可以保证此解决方案无法移植到其他操作系统,但您无论如何都可能不关心。