これに取り組むための最良の方法がわからないため、まだこのビットをコーディングしていません。
まず、プログラムが現在行っていることは、プログラムと同じディレクトリにあるすべてのファイルの名前を文字列の配列に入れ、その配列を出力するだけです。
私がやりたいのは、これらをファイル拡張子でソートすることです。ユーザーが選択できる特定の拡張子のリストが表示され、その後、フォルダー内のその拡張子を持つすべてのファイルがユーザーに返されます。
どうすればいいのかわかりません。最初に頭に浮かぶのは、ベクトルを反復処理し、各文字列を目的の拡張子を持つ別の文字列と比較し、一致する場合はその文字列をそのファイル拡張子に固有の別のベクトルにプッシュすることです。私が探している拡張機能は 5 つしかないので、拡張機能ごとに大量の新しいベクターを作成する必要はありません。
別の方法として、元のベクトルにデータを入力せず、最初にユーザーの要求を取得してから、ファイルを繰り返し処理し、一致する拡張子を持つすべてのファイルを特定のベクトルにプッシュすることも理にかなっているかもしれないと考えました。別のオプションを選択すると、ベクターは単純にクリアされ、新しいファイル名が再設定されます。
実際に比較を行う方法に関するヒントはありますか?私はC++構文が得意ではありません.また、別のタイプのコンテナを使用するのが賢明でしょうか?
皆さんが私の道を進んで投げてくれるすべてのアドバイスに感謝します。それは大歓迎です!
#include <iostream>
#include <filesystem>
#include <vector>
using namespace std;
using namespace std::tr2::sys;
void scan( path f, unsigned i = 0 )
{
string indent(i,'\t');
cout << indent << "Folder = " << system_complete(f) << endl;
directory_iterator d( f );
directory_iterator e;
vector<string>::iterator it1;
std::vector<string> fileNames;
for( ; d != e; ++d )
{
fileNames.push_back(d->path());
//print out conents without use of an array
/*cout << indent <<
d->path() << (is_directory( d->status() ) ? " [dir]":"") <<
endl;*/
//if I want to go into subdirectories
/*if( is_directory( d->status() ) )
scan( f / d->path(), i + 1 );*/
}
for(it1 = fileNames.begin(); it1 != fileNames.end(); it1++)
{
cout << *it1 << endl;
}
}
int main()
{
path folder = "..";
cout << folder << (is_directory( folder ) ? " [dir]":"") << endl;
scan( folder );
}