readdir读取的顺序貌似没什么规律的。
这里http://bbs.csdn.net/topics/310054496有人说跟每个文件的d_off有关。但在我机器上测试过貌似没有规律。
好吧。
其实我只是需要确保每次遍历文件夹的时候,顺序都是一样的就行了。所以自己排序一下即可。
/**
* path:目录
* files:用于保存文件名的vector
* r:是否需要遍历子目录
*/
void listDir(const char *path,vector<string>& files,bool r = false)
{
DIR *pDir;
struct dirent *ent;
char childpath[512];
char absolutepath[512];
pDir = opendir(path);
memset(childpath, 0, sizeof(childpath));
while ((ent = readdir(pDir)) != NULL)
{
if (ent->d_type & DT_DIR)
{
if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0)
{
continue;
}
if(r) //如果需要遍历子目录
{
sprintf(childpath, "%s/%s", path, ent->d_name);
listDir(childpath,files);
}
}
else
{
sprintf(absolutepath, "%s/%s", path, ent->d_name);
files.push_back(absolutepath);
}
}
sort(files.begin(),files.end());//排序
}