#前提
投稿者自体: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に対応するようにしてファイル検索しているので、
新しいバージョンでもっと簡易なコーディングにできないか検討予定