如何将TStringDynArray转换为TStringList

时间:2014-10-15 10:50:00

标签: vcl tstringlist c++builder-xe5 tstringdynarray

我正在使用TDirectory::GetFiles()来获取文件列表(显然)。 结果存储在TStringDynArray中,我想将其转移到TStringList,其唯一目的是使用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.

}

1 个答案:

答案 0 :(得分:3)

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

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的其余部分很好地集成。但这只是我的意见。