我被给了这段代码。我终于开始测试了它(通过一些更改将文件放在不同的地方)...
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);
}
它无法正常工作。一开始就混淆了......
......的真实结构。
根 根\ subdir1 根\ subdir2 根\ subdir3
像这样搞砸了......
根 根\ subdir1 根\ subdir1 \ subdir2 根\ subdir1 \ subdir2 \ subdir3
并最终停止包括root或sub \ sub文件夹,'path'只包含一个子文件夹(没有其根文件夹)
这对于获取可用的全路径文件名是完全没用的。
所以 你能告诉我代码出错的地方...... 或给我一些关于如何在dir中获取完整路径文件名的建议它的子目录。
我希望它尽可能基本。即没有不常见的高级c ++功能。构建器noob可能能够调试的东西。
答案 0 :(得分:4)
在这里,您将每个子路径附加到当前路径:
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*/);