我想知道在C++中是否有一种简单的方法可以从包含许多文件的文件夹中读取大量文件名.如果有人在想,它们都是位图.
我对Windows编程知之甚少,所以我希望可以使用简单的C++方法完成.
Boost提供了一个basic_directory_iterator
提供符合C++标准的输入迭代器,它可以访问目录的内容.如果您可以使用Boost,那么这至少是跨平台代码.
我想你正在寻找FindFirstFile()
和FindNextFile()
.
只是快速查看我的代码段目录.发现这个:
vectorfilenames; CStdString directoryPath("C:\\foo\\bar\\baz\\*"); WIN32_FIND_DATA FindFileData; HANDLE hFind = FindFirstFile(directoryPath, &FindFileData); if (hFind != INVALID_HANDLE_VALUE) { do { if (FindFileData.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) filenames.push_back(FindFileData.cFileName); } while (FindNextFile(hFind, &FindFileData)); FindClose(hFind); }
这为您提供了一个包含目录中所有文件名的向量.它当然只适用于Windows.
JoãoAugusto在回答中指出:
不要忘记检查后FindClose(hFind)
:
DWORD dwError = GetLastError(); if (dwError != ERROR_NO_MORE_FILES) { // Error happened }
如果在网络上扫描,这一点尤为重要.
C ++ 17包括实现该目标的标准方法
http://en.cppreference.com/w/cpp/filesystem/directory_iterator
#include#include #include namespace fs = std::filesystem; int main() { fs::create_directories("sandbox/a/b"); std::ofstream("sandbox/file1.txt"); std::ofstream("sandbox/file2.txt"); for(auto& p: fs::directory_iterator("sandbox")) std::cout << p << '\n'; fs::remove_all("sandbox"); }
可能的输出:
sandbox/a sandbox/file1.txt sandbox/file2.txt
您还可以使用POSIX opendir()和readdir()函数.请参阅本手册页,其中还包含一些很好的示例代码.