1

TDirectory::GetFiles()用来获取文件列表(显然)。结果存储在 a 中TStringDynArray,我想将其传输到 aTStringList的唯一目的是使用IndexOf()成员查看列表中是否存在字符串。

任何可以让我知道从 TDirectory::GetFiles() 返回的文件列表中是否存在某个字符串的解决方案都可以。虽然,知道如何转换 TStringDynArray 会很有趣。

TStringDynArray DynFiles = TDirectory::GetFiles("Foo path");
System::Classes::TStringList *Files = new System::Classes::TStringList;

Files->Assing(DynFiles) // I know this is wrong, but it illustrates what I want to do.
if(Files->IndexOf("Bar") { // <---- This is my goal, to find "Bar" in the list of files.

}
4

1 回答 1

4

TStringList并且TStringDynArray对彼此一无所知,因此您必须手动复制字符串:

TStringDynArray DynFiles = TDirectory::GetFiles("Foo path");
System::Classes::TStringList *Files = new System::Classes::TStringList;

for (int I = DynFiles.Low; I <= DynFiles.High; ++I)
    Files->Add(DynFiles[I]);

if (Files->IndexOf("Bar")
{
    //...
}

delete Files;

由于无论如何您都必须手动循环遍历数组,因此您可以摆脱TStringList

TStringDynArray DynFiles = TDirectory::GetFiles("Foo path");

for (int I = DynFiles.Low; I <= DynFiles.High; ++I)
{
    if (DynFiles[I] == "Bar")
    {
        //...
        break;
    }
}

但是,如果您只对检查特定文件是否存在感兴趣,请TFile::Exists()改为查看,甚至Sysutils::FileExists().

if (TFile::Exists("Foo path\\Bar"))
{
    //...
}

if (FileExists("Foo path\\Bar"))
{
    //...
}

* 就个人而言,我讨厌该IOUtils单元将动态数组用于列表。它们速度慢、效率低,并且不能与 RTL 的其余部分很好地集成。但这只是我的观点。

于 2014-10-15T23:10:35.367 回答