特定のディレクトリとそのサブディレクトリにあるすべてのファイルのパスとファイル名を取得します
-
19-08-2019 - |
質問
このコードはしばらく前に提供されました。私はついにテストに取り掛かりました(ファイルを別の場所に置くためにいくつかの変更を加えました)...
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);
}
正常に動作しません。最初は混乱します。.
...の実際の構造
ルート root \ subdir1 root \ subdir2 root \ subdir3
このようにめちゃくちゃになります...
ルート root \ subdir1 root \ subdir1 \ subdir2 root \ subdir1 \ subdir2 \ subdir3
そして最終的にはルートまたはサブ\サブフォルダーを含めなくなり、「パス」にはサブフォルダーのみが含まれます(ルートフォルダーなし)
これは、使用可能なフルパスファイル名を取得するためにはまったく役に立ちません。
だからどちらかコードのどこがおかしいのか教えてもらえますか... またはディレクトリ内のフルパスのファイル名を取得する方法についてアドバイスをください。そのサブディレクトリ。
できるだけ基本的なものにしたい。つまり、珍しい高度なC ++機能はありません。ビルダーnoobがデバッグできる可能性が高いもの。
解決
ここで、現在のパスに各サブパスを追加します。
path.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(path/*, DataSet*/);
結合されたパスに新しい変数を使用するので、ディレクトリ内の残りのファイル/ディレクトリに必要なpath
変数を台無しにしないでください:
AnsiString subpath;
subpath.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(subpath/*, DataSet*/);
所属していません StackOverflow