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