我是C ++的新手,对于我的第一个任务,我被要求打开一个目录(及其所有子目录)并仅存储数组中的.txt文件路径。这是我到目前为止所做的,但我已经犯了多个错误。有人可以帮忙吗?
#include<stdio.h>
#include<sys/stat.h>
#include<iostream>
#include<string.h>
#include<string>
#include<dirent.h>
using namespace std;
void explore(char *dir_name){
DIR *dir; // pointer to directory
struct dirent *entry; // all stuff in the directory
struct stat info; // info about each entry
dir = opendir(dir_name);
if (!dir)
{
cout << "Directory not found" << endl;
return;
}
while ((entry = readdir(dir)) != NULL)
{
if (entry->d_name[0] != '.')
{
string path = string(dir_name) + "/" + string(entry->d_name);
cout << "Entry = " << path << endl;
stat(path,&info) //
if (S_ISDIR(info.st_mode))
{
explore(path);
}
}
}
closedir(dir);
}
int main{
explore(".");
return 0;
}
答案 0 :(得分:1)
你是Linux吗?你为什么要把事情弄复杂?有一种称为&#34;文件树步行&#34;这将以最小的努力完成你想要的。这是一个简单的例子。有关输入参数的更多信息,请man ftw
。
#include <iostream>
#include <ftw.h>
#include <fnmatch.h>
static int explore( const char *fpath,
const struct stat *sb,
int typeflag )
{
if (typeflag == FTW_F) ///< it's a file
{
if (fnmatch("*.txt", fpath, FNM_CASEFOLD) == 0) ///< it's a .txt file
{
std::cout << "found txt file: " << fpath << std::endl;
}
}
return 0;
}
int main()
{
ftw(".", explore, 8);
return 0;
}