-2

我正在尝试使用 c++ 读取 unix 目录(包括所有子目录)并列出前 10 个最大的文件。我读过我可以使用#include dirent.h 并使用struct dirent,但是我无法将目录名称作为变量传递给opendir/readdir。基本上它无法识别它并说找不到文件/目录。请你能帮助我如何在 C++ 中执行此操作并打印出目录中前 10 个最大的文件吗?谢谢

DIR *dir;
struct dirent *ent;
dir = opendir ("homedir");
if (dir != NULL) {
    while ((ent = readdir (dir)) != NULL) {
        cout << ent->d_name <<endl;
    }

    closedir (dir);
} else {
    cout << "Can't open directory" << endl;
}
4

2 回答 2

0

您快到了。你有所有的文件名。有了这些,您可以stat获取每个文件的文件大小。当您对文件大小进行降序排序时,您有十个最大的文件。

struct stat buf;
stat(ent->d_name, &buf);

请参阅手册页中的详细示例。

于 2012-12-26T20:36:00.630 回答
0

您并没有真正提供足够的细节,但是当您递归阅读时,您是否将您阅读的名称后缀为以前的名称。读取目录不会更改当前目录,因此您的函数应该或多或少类似于:

标准::向量
递归读取目录(std::string const& 路径)
{
    std::vector 结果;
    对于路径中的每个名称,
        如果是目录
            结果.插入(
                结果.end(),
                递归读取目录(路径 + '/' + 文件名));
        别的
            results.push_back(FileInfo(path + '/' + filename));
    返回结果;
}

在 的构造函数中FileInfo,用于stat获取大小。获得结果后,按大小排序,然后输出前 10 个。

于 2012-12-26T20:30:03.447 回答