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());//排序 }