1

編集: std::tr2::sys を使用していますが、ブーストのファイルシステムではありません

私は、コンピューター上のディレクトリをスキャンし、それらのファイルに関する統計を返す単純なアプリに取り組んでいます。scan を呼び出すには、再帰的呼び出しと非再帰的呼び出しの 2 つの方法があります。パスは、スキャンを再帰的に実行するかどうかのフラグとともにスキャン メソッドに渡されます。2 つの実装を考えると、path folder次のようになります。

directory_iterator start( folder ), end;
for( ; start != end; ++start ) {
    //Some code in here
    // get the path like this:
    auto path = start->path();
}

また

recursive_directory_iterator start( folder ), end;
for( ; start != end; ++start ) {
    //Some code in here
    // get the path like this:
    auto path = start->path();
}

私が遭遇している問題は、通常の directory_iterator を使用するブロックでパスを取得しようとすると、ファイル名のみが返されることです。"myTextFile.txt" を recursive_directory_iterator から取得すると、システム上のファイルへのフル パスが返されます。いずれの場合も、folder の値は同じです (完全なファイル パスも)。パスの先頭部分が切り落とされている理由はありますか、または directory_iterator から返された省略されたパスから完全なファイル パスを取得する方法はありますか?

4

2 に答える 2

2

フルパスの場合、使用する必要がありますstart->path().directory_string()

directory_iterator end;
for (directory_iterator start(p);
      start != end;
      ++start)
{
    if (is_directory(start->status()))
    {
      //A directory
    }
    if (is_regular_file(start->status()))
    {   
      std::cout << start->path().directory_string()<< "\n";
    }
}

必要に応じて以下を試してみてください。詳細についてはブーストのドキュメントを参照してください。ただし、名前はすべてを示唆しています。

start->path().branch_path();
start->path().directory_string();
start->path().file_string();
start->path().root_path();
start->path().parent_path();
start->path().string();
start->path().basename();
start->path().filename();
start->path().root_name();
start->path().relative_path();
于 2013-08-09T13:38:38.350 に答える