しばらく前にこのコードを受け取りました。私はついにそれをテストすることに取り掛かりました(ファイルを別の場所に置くためにいくつかの変更を加えました)...
void AddFiles(AnsiString path/*, TDataSet *DataSet*/)
{
TSearchRec sr;
int f;
f = FindFirst(path+"\\*.*", faAnyFile, sr);
while( !f )
{
if(sr.Attr & faDirectory)
{
if(sr.Name != "." && sr.Name != "..")
{
path.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(path/*, DataSet*/);
}
}
else
{
Form1->ListBox1->Items->Add(path+ "\\"+ sr.Name);
//DataSet->Append();
//DataSet->FieldByName("Name")->Value = sr.Name;
/* other fields ... */
//DataSet->Post();
}
f = FindNext(sr);
}
FindClose(sr);
}
正しく動作しません。最初は混みますが..
の実際の構造...
ルート ルート\サブディレクトリ1 ルート\サブディレクトリ2 ルート\サブディレクトリ3
このようにぐちゃぐちゃになる…
root root\subdir1 root\subdir1\subdir2 root\subdir1\subdir2\subdir3
そして最終的に、ルートまたはサブ\サブフォルダーを含めるのをやめ、「パス」にはサブフォルダーのみが含まれます(ルートフォルダーなし)
これは、使用可能なフルパス ファイル名を取得するのにはまったく役に立ちません。
コードが間違っている場所を教えてください... または、ディレクトリとそのすべてのサブディレクトリでフルパスのファイル名を取得する方法についてアドバイスをください。
なるべく基本にしたい。つまり、珍しい高度な C++ 機能はありません。ビルダー初心者がデバッグできる可能性が高いもの。