Delphi 10.2でディレクトリ内のファイルを列挙する

Delphi 10

触ったことがあるのがDelphi 5とか6が精々なので、流石にその頃とは違って今風の方法があるようです。でもExtractFilePathなんかは現役で使えるみたいで安心しました😌
っていうかファイルを列挙する部分以外、昔(それこそ20年近く前では…)と全く同じだと思います。枯れた技術って素晴らしいです!

列挙の部分ですが、具体的にはTDirectory.GetFilesメソッドを使います。TDirectoryというのがIOUtilsで定義されているので、usesに追記する必要がありました。引数は文字列でファイルのパスと、‘*.jpg’などお馴染みの検索パターンを指定します。TSearchOptionというのは、そのフォルダのみか、サブディレクトリも検索するかの指定みたいです。
ドキュメントは下記。昔はFindFirst的なものを使ったんでしたっけ?

そして、この返り値がTStringDynArrayという初めて見る型なんですが、単純にarray of string、文字列の配列に名前を付けたものでした。System.Typesで定義されているみたいなので、これもusesに追記します。
下記はTOpenPictureDialogを使って、ディレクトリ内のjpgファイルをリストボックスに追加するコードです。Delphiも今はfor..in構文とか使えるんですね。当たり前か…… ちなみに、TOpenPictureDialogとかを使ってしまうとバリバリのVCLアプリケーションになってしまうので、今のDelphiの武器であるマルチOS対応とはいかないみたいです。

uses
  ... System.Types, IOUtils;
procedure TForm1.actListupFilesExecute(Sender: TObject);
var
  Path: String;
  FileList: TStringDynArray;
  FileName: String;
begin
  ListBox1.Items.Clear;

  if OpenPictureDialog1.Execute then
  begin
    Path := ExtractFilePath(OpenPictureDialog1.FileName);
    FileList := TDirectory.GetFiles(Path, '*.jpg', TSearchOption.soTopDirectoryOnly);
    for FileName in FileList do
    begin
      ListBox1.Items.Add(FileName);
    end;
  end;
end;

参考🙇

コメントを残す

メールアドレスが公開されることはありませんし、空欄で大丈夫です。っていうかコメント以外空欄で良いです。気軽にコメントして下さい。
Email won't be published. Or you can leave it blank. I mean you can leave everything blank but comment. Feel free to leave a comment, thanks.