2016-05-13 8 views
0

私はlsコマンドの動作をシミュレートしようとしています。現在のディレクトリの内容を印刷するC++

私は

DIR *dir; 
    dirent *pdir; 
    dir=opendir("."); 
    while((pdir=readdir(dir))) 
    { 
     cout<< pdir->d_name << endl; 
    } 
    closedir(dir); 

私の現在のディレクトリに2つのファイル、Screen.cppとのa.outが含まれているdirent.hライブラリを使用して簡単なコードを作成しました。私は、ソート/格納することなく、その達成するためにどのように任意の簡単な方法がありますls -laコマンドは、しかし、このコードは

. 
Screen.cpp 
.. 
a.out 

のようにそれを出力

. 
.. 
a.out 
Screen.cpp 

を、たとえばうとして、順番にそれを印刷するために、このコードを希望いくつかのコンテナのリスト?

+1

'readdir'は返品の順序付けについて保証していません。 (iノード、ディスクの場所、追加された日付など) – vu1p3n0x

+0

UNIXシステムコマンドを使用することはできません – Darlyn

+0

それほど難しくありません。ちょっとした作業で、 'readdir'をイテレータに変換できます。次に、並べ替えを読み取り、エントリを印刷するために合計3行になります。 –

答えて

0

答えは、値を格納したり並べ替えたりすることができません。

DIRライブラリをラップしてイテレータとして使用できます。

MyCPPDir dir("."); 
std::set<std::string> objects(dir.begin(), dir.end()); 
std::copy(objects.begin(), objects.end(), 
      std::ostream_iterator<std::string>(std::cout, "\n")); 
+0

'MyCPPDir'とは何ですか? – scarface

+0

@lolofon:10分かかると、ディレクトリのようなC++ラッパーでdirent libをラップすることができます。それは 'MyCPPDir'と同じです。 –

+0

私はまだこの機能について知りません。ありがとうございました。 – scarface

関連する問題