我正在使用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.
}
答案 0 :(得分:3)
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的其余部分很好地集成。但这只是我的意见。