ディレクトリを読み取り、含まれているすべてのディレクトリと各ディレクトリのすべてのサブディレクトリを検索してデータ構造に保存するメソッドを作成したいと考えています。具体的には、名前を次のように引用したい:
フォルダ1 フォルダ11 フォルダ12 フォルダ2 フォルダ21 フォルダ22 フォルダ23
明らかに再帰を伴う関数が必要です。コンソール アプリケーションでクラス メンバー メソッドを次のように一時的に使用します。
private:
struct dirent *ep;
void DirectoryReader::parseDirectory(char* readingDirectory)
{
char* tempDirectory = (char*)malloc(sizeof(readingDirectory) + 200);
string temp = readingDirectory;
DIR *dp;
dp = opendir (readingDirectory);
if (dp != NULL)
{
while (ep = readdir (dp))
{
puts (ep->d_name);
temp += readingDirectory;
temp += "/";
temp += ep->d_name;
char * buffer = new char[temp.length()];
strcpy(buffer,temp.c_str());
parseDirectory(buffer);
}
(void) closedir (dp);
}
else
perror ("Couldn't open the directory");
}
わかりました、最適なコードを書いたわけではありませんが、最初にキャッチされた名前を表示したいと思います。ただし、親ディレクトリの名前を複数回考慮するため、正しく機能しません。同じメソッドの呼び出しを (再帰を実行せずに) 出しても、最初の 2 つの名前は . と .. 。なんで?
説明されているプロセスを実行する関数を提案してもらえますか、またはこの関数に必要な修正を示してもらえますか?