1

ファイルのリストを取得するために使用TDirectory::GetFiles()しています(明らかに)。結果は a に格納され、メンバーを使用してリストに文字列が存在するかどうかを確認するためだけTStringDynArrayに、 a に転送したいと考えています。TStringListIndexOf()

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

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 とうまく統合されません。しかし、それは私の意見です。

于 2014-10-15T23:10:35.367 に答える