列出Unix目录中按大小排列的前10个文件

list top 10 files by size in a unix directory

本文关键字:排列 10个 文件 Unix 列出      更新时间:2023-10-16

我正在尝试使用c++读取unix目录(包括所有子目录)并列出十大文件。我已经读到,我可以使用#include direct .h和使用struct dient,但我有麻烦将目录名称作为变量传递给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;
}

你没有给出足够的细节,但是当你阅读的时候递归地,您是否将您读取的名称后置到以前的名字。读取目录不会改变当前目录,所以你的函数应该或多或少像:

<>之前std::向量readdirectoresrecursive (std::string constys & path){std::向量结果;表示路径中的每个名称如果是目录results.insert (results.end (),readdirectoresrecursive (path + '/' + filename);其他的结果。push_back(FileInfo(path + '/' + filename));返回结果;}之前

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

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

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

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