0

不久前我收到了这个代码。我终于开始测试它(通过一些更改将文件放在不同的位置)......

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++ 功能。构建器新手可能能够调试的东西。

4

1 回答 1

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*/);
于 2009-01-19T04:32:05.873 回答