如何使用C ++打开目录

时间:2018-02-07 19:21:59

标签: c++ directory

我是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;
}

1 个答案:

答案 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;
}