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

时间:2009-01-19 04:06:44

标签: c++builder subdirectory

我被给了这段代码。我终于开始测试了它(通过一些更改将文件放在不同的地方)...

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可能能够调试的东西。

1 个答案:

答案 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*/);