readdir 排除目录中的某些文件
readdir excludes some files in a directory
我有一段相当简单的代码来获取 C++ 目录中的文件列表。令人费解的是,目录中的 135 个文件中只有 68 个最终存储在向量文件名中。发生了什么事?
DIR* pDIR = opendir(directoryName.c_str());
struct dirent* entry = nullptr;
vector<string> fileNames;
while(readdir(pDIR)) {
entry = readdir(pDIR);
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0 )
fileNames.push_back(entry->d_name);
}
closedir(pDIR);
您在每次迭代中执行 readdir 2 次。所以,你跳过了一半的文件。
修复很简单,只需调用一次:
DIR* pDIR = opendir(directoryName.c_str());
struct dirent* entry = nullptr;
vector<string> fileNames;
while(entry = readdir(pDIR)) {
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0 )
fileNames.push_back(entry->d_name);
}
closedir(pDIR);
我有一段相当简单的代码来获取 C++ 目录中的文件列表。令人费解的是,目录中的 135 个文件中只有 68 个最终存储在向量文件名中。发生了什么事?
DIR* pDIR = opendir(directoryName.c_str());
struct dirent* entry = nullptr;
vector<string> fileNames;
while(readdir(pDIR)) {
entry = readdir(pDIR);
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0 )
fileNames.push_back(entry->d_name);
}
closedir(pDIR);
您在每次迭代中执行 readdir 2 次。所以,你跳过了一半的文件。
修复很简单,只需调用一次:
DIR* pDIR = opendir(directoryName.c_str());
struct dirent* entry = nullptr;
vector<string> fileNames;
while(entry = readdir(pDIR)) {
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0 )
fileNames.push_back(entry->d_name);
}
closedir(pDIR);