只是快速查看我的代码段目录.发现这个:
vector<CStdString> filenames;
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);
}
Run Code Online (Sandbox Code Playgroud)
这为您提供了一个包含目录中所有文件名的向量.它当然只适用于Windows.
JoãoAugusto在回答中指出:
不要忘记检查后FindClose(hFind):
DWORD dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES)
{
// Error happened
}
Run Code Online (Sandbox Code Playgroud)
如果在网络上扫描,这一点尤为重要.
C ++ 17包括实现该目标的标准方法
http://en.cppreference.com/w/cpp/filesystem/directory_iterator
#include <fstream>
#include <iostream>
#include <filesystem>
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");
}
Run Code Online (Sandbox Code Playgroud)
可能的输出:
sandbox/a
sandbox/file1.txt
sandbox/file2.txt
Run Code Online (Sandbox Code Playgroud)