代码比较通用,记录下防走失。
环境:win10, VS2019, MSVC/14.29.30133
仅获取当前文件夹下的所有文件夹名,不递归到子文件夹内获取文件夹名。
#include <io.h>
#include <string>
std::vector<std::string> getDirs(std::string dir) {
std::vector<std::string> folders;
intptr_t hFile;//用于查找的句柄
struct _finddata_t fileinfo;//文件信息的结构体
//第一次查找/*不可缺
hFile = _findfirst(dir.append("/*").c_str(), &fileinfo);
printf("%s\n", fileinfo.name); //打印出找到的文件的文件名
while (0 == _findnext(hFile, &fileinfo))//循环查找其他文件夹
{
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
folders.push_back(fileinfo.name);
}
}
_findclose(hFile);//别忘了关闭句柄
return folders;
}
int main(){
std::string test_dir = "D:";
std::vector<std::string> files_n = getDirs(test_dir);
return 0;
}
获取当前文件夹下的所有文件,返回文件完整路径。递归到子文件夹中查找文件。
#include <io.h>
#include <string>
void getAllFiles(std::string path, std::vector<std::string>& files)
{
//文件句柄
intptr_t hFile = 0;
//文件信息
struct _finddata_t fileinfo;
std::string p;
if ((hFile = _findfirst(p.assign(path).append("/*").c_str(), &fileinfo)) != -1)
{
do
{
//如果是目录,迭代之
//如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getAllFiles(p.assign(path).append("/").append(fileinfo.name), files);
}
else
{
files.push_back(p.assign(path).append("/").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
int main(){
std::string test_dir = "D:";
getFiles(test_dir, files_n);
return 0;
}
参考资料: