获取给定目录及其子目录中所有文件的路径和文件名

问题描述:

我刚刚收到此代码。我终于可以测试它(含部分变更以将文件放在不同的地方)......获取给定目录及其子目录中所有文件的路径和文件名

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*/); 
+0

这样做的伎俩。谢谢 :) – MrVimes 2009-01-19 19:30:44