Delphi は、ディレクトリの作成と削除、現在のディレクトリの設定、現在のディレクトリの取得など、ファイル操作のための多くの関数を提供します。ディレクトリの削除には関数(Function) RemoveDir とプロシージャ(PROcedure) RmDir がありますが、これらは空のディレクトリのみを削除でき、空でないディレクトリは削除できません。ディレクトリ ツリー全体 (DelTree) を削除するには、その中のサブディレクトリとファイルを削除するプログラムを作成する必要があります。
ディレクトリ内のファイルは、関数 DeleteFile を呼び出すことで削除できますが、特殊ファイル (読み取り専用、システム、隠しファイルなど) は、削除する前にファイル属性を通常のファイルに変更する必要があります。 FileSetAttr 関数を使用してファイル属性を変更できます。ここでは、特殊ファイルの属性を通常のファイル属性 (属性値は 0) に設定します。
ツリー ディレクトリ構造が再帰的メソッドに最適であることを考慮して、ここでは再帰的アルゴリズムを使用して DelTree 関数を実装します。具体的な導入手順は以下の通りです。
//path は削除するディレクトリのパスです
// ディレクトリが正常に削除された場合は True を返し、それ以外の場合は False を返します
関数 TForm1.Deltree (パス : 文字列): ブール値;
変数
検索記録: T検索記録;
始める
//ディレクトリが存在するかどうかを判定する
DirectoryExists(パス)の場合
始める
// ディレクトリを入力し、その中のサブディレクトリとファイルを削除します
oldDir := GetCurrentDir;
ChDir(パス);
// ディレクトリ内のすべてのファイルを検索します
FindFirst(''??.??'', faAnyFile, SearchRec);
繰り返す
//ファイル属性を通常の属性値に変更します
FileSetAttr(SearchRec.Name,0);
// . and .. ではなくディレクトリの場合は、DelTree を再帰的に呼び出します。
if(SearchRec.Attr および faDirectory > 0) then
始める
if(SearchRec.Name[1]<>'.') then
if(Deltree(SearchRec.Name)ではない) then
壊す;
終わり
//ファイルの場合は直接削除
それ以外
if(削除ファイル(検索記録名)ではない)then
壊す ;
//最後まで検索を続ける
(FindNext(SearchRec)<>0) まで;
// 親ディレクトリに戻り、ディレクトリを削除します
ChDir('..');
結果 := ReMoveDir(パス);
SetCurrentDir(oldDir);
終わり
それ以外
結果 := False ;
終わり ;
このプログラムはコンパイルされ、Windows 98 および Delphi 4.0 で渡されます。