2009-04-08 5 views

答えて

6

あなたは実装固有のものを使用する必要がありますので、C++標準では、任意のディレクトリ機能を指定していません。たとえば、Windowsではchdir()関数を使用できます。 <direct.h>で宣言されています。

ところで、このような質問を投稿する際には、どのオペレーティングシステムに興味があるかを示すことをお勧めします。

1

あなたはディレクトリを変更したいのですが、ちょうど彼らのエントリを読み込むために、それらを開いていない

は通常、私はそれが簡単にプロセスのカレントディレクトリに頼るより完全なパスを処理するために見つける()(opendir関数を参照)。

9

ファイルとディレクトリに素早く移植可能な方法でアクセスしたい場合は、Boost.Filesystem以上にしてください。必要なものを正確に見つけるために、ドキュメントを参照する必要があります。以下は、フレームワークを使って物事を完成させる方法の提案です。

#include <iostream> 
#include <filesystem> 

using std::tr2::sys; 
using std::cout; 

void do_something_with_file(std::string const& p) 
{ 
    std::cout << "Found file : " << p << std::end; 
} 

void explore_directory(std::string const& p) 
{ 
    for (directory_iterator itr(p); itr!=directory_iterator(); ++itr) 
    { 
     if(is_directory(itr->status())) 
     { 
     explore_directory(itr->path().filename()); 
     } 
     else if(is_regular_file(itr->status())) 
     { 
     do_something_with_file(itr->path().filename()); 
     } 
    } 
} 

int main(int argc, char* argv[]) 
{ 
    std::string p(argc <= 1 ? "." : argv[1]); 

    if (is_directory(p)) 
    { 
    explore_directory(p); 
    } 
    else cout << (exists(p) : "Found: " : "Not found: ") << p << '\n'; 

    return 0; 
} 
+0

私は前の4つの投稿のいずれもブーストを推奨していないことに驚いています。 –

+0

それはネイティブシステムコールでそれをすることを学ぶチャンスを与えます –

+0

あなたはいつでもそれを行うことができますが、それは私の意見では、(タイムコードで)効率的な方法ではありません。 –

関連する問題