readdir用于读取某个文件夹中的全部文件或文件夹,相当于ls。
但是readdir并不保证读取后的文件顺序,在不同的操作系统上可能有不同的顺序。
在某些场景下需要注意,比如读取配置文件时,可能会根据配置文件进行一些初始化,但如果初始化时有些必须的内容还未初始化,可能出现问题。
如果要实现排序可能要自行排序。
如下所示:读取文件后,用sort进行排序。
vector<string> fileNameList;
sort(fileNameList.begin(), fileNameList.end());
//递归获取文件夹下所有文件
void GetFiles(string filePath, vector<string>& files)
{
if(filePath.empty()) return;
struct dirent *filename = NULL;
DIR *dir = NULL;
dir = opendir(filePath.c_str());
if(dir == NULL)
{
return ;
}
string mySep = "/";
while((filename = readdir(dir)) != NULL)
{
if(!strcmp(filename->d_name,".")||!strcmp(filename->d_name,".."))
continue;
string path = filePath + mySep + filename->d_name;
struct stat s;
lstat(path.c_str(),&s);
if(S_ISDIR(s.st_mode))
{
GetFiles(path, files);
}
else
{
files.push_back(path);
}
}
closedir(dir);
}
Chris's Wiki :: blog/unix/ReaddirOrder https://utcc.utoronto.ca/~cks/space/blog/unix/ReaddirOrder