我想知道在C中是否有一种简单的方法可以从一个包含很多文件的文件夹中读取很多文件名。如果有人想知道的话,它们都是位图。我不太了解Windows编程,所以我希望它可以用简单的C方法完成。
n1bvdmb61#
Boost提供了一个basic_directory_iterator,它提供了一个符合C++标准的输入迭代器,可以访问目录的内容。如果你可以使用Boost,那么这至少是一个跨平台的代码。
basic_directory_iterator
ijxebb2r2#
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"); }
可能的输出:
sandbox/a sandbox/file1.txt sandbox/file2.txt
ulmd4ohb3#
由于指定了Windows,我想你要找的是FindFirstFile()和FindNextFile()。
FindFirstFile()
FindNextFile()
xzabzqsa4#
刚刚在我的snippets目录中快速浏览了一下。找到了这个。它直接使用微软的Win32 API:
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); }
这会给你一个包含目录中所有文件名的向量。当然,它只适用于Windows。João Augusto在answer:
FindClose(hFind)
DWORD dwError = GetLastError(); if (dwError != ERROR_NO_MORE_FILES) { // Error happened }
cngwdvgl5#
你也可以使用POSIX的opendir()和readdir()函数,参见this manual page,它也有一些很棒的示例代码。
yiytaume6#
因为你是在Windows上编程,我建议你使用Win32的FindFirstFile()和FindNextFile()函数。这些函数给予你完全控制你如何搜索文件。这些都是简单的C API,并不难使用。另一个优点是Win32错误不会被隐藏,也不会因为C/C++库层而变得更难找到。
dxxyhpgq7#
另一个选择是-1.第一个月1.现在逐行读取temp.txt以获取所有文件名。
ego6inou8#
为什么不使用glob()?
glob()
glob_t glob_result; glob("/foo/bar/*",GLOB_TILDE,NULL,&glob_result); for(unsigned int i=0;i<glob_result.gl_pathc;++i){ cout << glob_result.gl_pathv[i] << endl; }
8条答案
按热度按时间n1bvdmb61#
Boost提供了一个
basic_directory_iterator
,它提供了一个符合C++标准的输入迭代器,可以访问目录的内容。如果你可以使用Boost,那么这至少是一个跨平台的代码。ijxebb2r2#
C++17包含了一个标准的实现方法
http://en.cppreference.com/w/cpp/filesystem/directory_iterator
可能的输出:
ulmd4ohb3#
由于指定了Windows,
我想你要找的是
FindFirstFile()
和FindNextFile()
。xzabzqsa4#
刚刚在我的snippets目录中快速浏览了一下。找到了这个。它直接使用微软的Win32 API:
这会给你一个包含目录中所有文件名的向量。当然,它只适用于Windows。
João Augusto在answer:
FindClose(hFind)
之后检查:*cngwdvgl5#
你也可以使用POSIX的opendir()和readdir()函数,参见this manual page,它也有一些很棒的示例代码。
yiytaume6#
因为你是在Windows上编程,我建议你使用Win32的
FindFirstFile()
和FindNextFile()
函数。这些函数给予你完全控制你如何搜索文件。这些都是简单的C API,并不难使用。另一个优点是Win32错误不会被隐藏,也不会因为C/C++库层而变得更难找到。
dxxyhpgq7#
另一个选择是-
1.第一个月
1.现在逐行读取temp.txt以获取所有文件名。
ego6inou8#
为什么不使用
glob()
?