QAサイトのスタック・オーバーフローでC++Builderの開発者が、System.SysUtilsユニットのFindFirst/FindNext関数で拡張子 ~1~や、その他の特殊な拡張子を持つすべてのファイルが見つからないという内容を質問していました。
このブログでは、この問題を解決するためのC++Builderのサンプルブログラムを紹介します。
ここでは、C++Builder 10.4を使用して、以下の手順に従ってアプリケーションを作成していきます。
1. C++Builder Windows VCLアプリケーション(空白のアプリケーション)を新規作成
2. プロジェクトに名前をつけて保存 (例えば、FindFirstVCLCpp)
3. フォーム上にTPanelを1つ配置し、AligeプロパティをalTopに変更
4. Panel1上にTButtonを1つ配置
5. Panel1上にTEditを1つ配置し、Textプロパティを”Find Files”に変更
6. フォーム上にTMemoを1つ配置し、AligeプロパティをalClientに変更
System.SysUtils.hppでのFindFirst関数の宣言は次のとおりです。
[crayon-6740948e47bf6940153018/]ここで重要な点は、検索するファイルのファイル属性(FindFirst関数の第二引数の Attr)を全部含めておくことです。 選択可能なファイル属性は、同様にSystem.SysUtils.hppで宣言されています。
[crayon-6740948e47c04967924858/]なお、System.SysUtils.hppは、デフォルトで以下のパスに配置されています。
[crayon-6740948e47c06258981573/]7. Button1をダブルクリックし、OnClickイベントハンドラを作成
8. OnClickイベントに以下のコードを実装
以下のコードでは、ディレクトリ内の ., .., .~* などの文字を含むすべてのファイルを表示します。
[crayon-6740948e47c09231270625/]9. プロジェクトをビルドし、アプリケーションを実行
10. Edit1のテキスト欄に検索したいディレクトリパスを入力
ここでは、C++Builderプロジェクトの__historyフォルダ内のファイルを検索します。例えば、C:\Users\<ログイン名>\Documents\Embarcadero\Studio\Projects\<プロジェクト名> \ __history\*.*
11. Button1をクリックすると、Memo1には下図のように特殊な拡張子を含むファイルが表示されます。
スタック・オーバーフローについて
スタック・オーバーフローでは、C++Builder SO Tagをクリックすると、他にもC++Builderに関する質問と回答を見つけることができます。
日本語版のスタック・オーバーフローで質問や回答を行うには、こちらを参照ください。