2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Delphiで指定フォルダ以下のファイル一覧を取得する

Posted at

#前提
 投稿者自体:github、Qiita共に使い方を上手く理解できてない可能性高し。
 作成環境的なもの:OS Windows10
          言語 Delphi 10.3 Community Edition
          
#やりたいこと
 指定フォルダ以下のファイル一覧を取得する
 Delphiのスレッドを理解しきれてないのでスレッド使って処理をする
 機能が生きているかどうかをわかるプログレスバーも利用する
 出力内容をExcelに張り付け、該当のフォルダを今後どうするかの判断材料にする

#作成物
 https://github.com/SequencePalladium/ScanFolder
 上記に作成したソースをアップ。取得できるはず。

#色々
 スレッドはTThreadを継承して作成。
 検索よりも、一覧を表出するのに時間がかかっている。。。
 なので、検索、ファイル一覧出力共にプログレスバーを出すようにしてみた。

##検索処理の進捗確認
 Unit1.pasの145行目で指定フォルダ内のサブフォルダ数を検索し、
 そのフォルダ数を元に処理がどれくらい進んでいるかをプログレスバーで表示。
 停止ボタンを押すと処理を中止する。

    GetFilesListAll(LBasePath, True);
    Synchronize(preChgFolStatus);
    for i := 1 to FParentFolder.Count - 1 do begin
      if Terminated then
      begin
        ShowMessage('検索が中止されました');
        Break;
      end;
      // サブフォルダ含め全検索
      GetFilesListAll(FParentFolder[i], False);
      Synchronize(chgFolStatus);
      Inc(FNowFoldersCount);
    end;
    Synchronize(endChgFolStatus);

##出力処理の進捗確認
 Unit1.pasの159行目からの処理。
 取得してきたリストカウントでfor文を回している。
 もちろん、レスポンスは微妙なのは理解しているが、作業がどれくらいまで進んでいるかを表出を優先。

    Synchronize(preShowMemo);
    for i := 0 to FFileList.Count - 1 do begin
      if Terminated then
      begin
        ShowMessage('出力が中止されました');
        Break;
      end;
      // ファイルリストをテキストエディタに出力
      // スピードよりも処理が見えるようにすることを重視
      Synchronize(showMemo);
      Inc(FNowFilesCount);
    end;
    Synchronize(endShowMemo);

##改変ポイント
 ・レスポンスを優先するかどうか
 ・ファイル出力プログレスバーを1000件単位で更新しているが、もっと多くしてもいいかも
 ・出力内容がExcel前提のタブ文字なので、お好きな形式にする

#参考にしたサイトなど
 主に下記サイトをベースに、自分なりに欲しい情報を取得するようにして作成。
 http://mrxray.on.coocan.jp/Delphi/plSamples/817_DirFileListTest.htm

#今後のやりたいこと
 もともとは古いDelphiに対応するようにしてファイル検索しているので、
 新しいバージョンでもっと簡易なコーディングにできないか検討予定

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?