获取给定目录及其子目录中所有文件的路径和文件名
问题描述:
我刚刚收到此代码。我终于可以测试它(含部分变更以将文件放在不同的地方)......获取给定目录及其子目录中所有文件的路径和文件名
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
并最终停止包括根或子\子文件夹和'路径'只包含一个子文件夹(没有其根文件夹)
这是完全无用的用于确定可用的全路径文件名。
所以要么你能告诉我在哪里的代码是怎么了...... 或给我如何得到一个目录的完整路径文件名及其所有子目录一些建议。
我希望它尽可能的基本。即没有不常见的高级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*/);
这样做的伎俩。谢谢 :) – MrVimes 2009-01-19 19:30:44