一段时间前我就收到了这段代码。我终于有时间测试它(通过一些修改将文件放在另一个地方).
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);
}它不能正常工作。一开始就搞混了..。
真正的结构..。
根根\根根\根根
就这样搞砸了..。
根\底根\根\底根
最后,它停止包含根文件夹或子文件夹,而“路径”只包含子文件夹(没有根文件夹)。
对于可使用的全路径文件名来说,这是完全无用的.
所以,,你能告诉我代码哪里出错了吗.或就如何在dir及其所有子目录中获取完整路径文件名给了我一些建议。
我希望它尽可能的基本。也就是说,没有不寻常的高级c++特性。建设者可以调试的东西。
发布于 2009-01-19 04:32:05
在这里,将每个子路径附加到当前路径:
path.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(path/*, DataSet*/);为组合路径使用一个新变量,这样您就不会弄乱目录中其余的文件/dirs仍然需要的path变量:
AnsiString subpath;
subpath.sprintf("%s%s%s", path, "\\", sr.Name);
AddFiles(subpath/*, DataSet*/);https://stackoverflow.com/questions/456504
复制相似问题