-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

あなたは実際には十分な詳細を提供していませんが、再帰的に読んでいるときに、読んだ名前を前の名前に後置していますか。ディレクトリを読み取っても現在のディレクトリは変更されないため、関数は多かれ少なかれ次のようになります。

std::vector
readDirectoriesRecursively( std::string const& path )
{
    std::ベクトルの結果;
    ディレクトリの
        場合、パス内の各名前
            results.insert(
                結果.end(),
                readDirectoriesRecursively(パス + '/' + ファイル名) ) ;
        そうしないと
            results.push_back( FileInfo( パス + '/' + ファイル名) );
    結果を返します。
}

のコンストラクタでFileInfo、 を使用statしてサイズを取得します。結果が得られたら、サイズで並べ替え、最初の 10 個を出力します。

于 2012-12-26T20:30:03.447 に答える
0

あなたはほとんどそこにいます。すべてのファイル名があります。これらを使用してstat、各ファイルのファイルサイズを取得することができます。ファイルサイズを降順に並べ替えると、最大の 10 個のファイルが表示されます。

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

man ページの詳細な例を参照してください。

于 2012-12-26T20:36:00.630 に答える