如何通过C ++中的修改时间对文件进行排序?
std::sort
需要比较功能
它以向量作为参数。我想根据修改对文件进行排序。
是否已有可用于实现此目的的比较功能或API?
答案 0 :(得分:0)
是的,您可以使用std::sort
并告诉它使用自定义比较对象,如下所示:
#include <algorithm>
std::vector<string> vFileNames;
FileNameModificationDateComparator myComparatorObject;
std::sort (vFileNames.begin(), vFileNames.end(), myComparatorObject);
FileNameModificationDateComparator
类的代码(随意使用较短的名称):
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
/*
* TODO: This class is OS-specific; you might want to use Pointer-to-Implementation
* Idiom to hide the OS dependency from clients
*/
struct FileNameModificationDateComparator{
//Returns true if and only if lhs < rhs
bool operator() (const std::string& lhs, const std::string& rhs){
struct stat attribLhs;
struct stat attribRhs; //File attribute structs
stat( lhs.c_str(), &attribLhs);
stat( rhs.c_str(), &attribRhs); //Get file stats
return attribLhs.st_mtime < attribRhs.st_mtime; //Compare last modification dates
}
};
stat struct definition here,以防万一。
警告:我没有检查此代码