[Delphi] 指定フォルダー階層下のファイルとフォルダーを削除する
< サンプル1 >
{$WARN SYMBOL_PLATFORM OFF}

procedure DeleteFolders(FolderName:string);
var
        SearchRec: TSearchRec;
        fname: string;
        rc, ww: Integer;
begin
    //パス名が区切り記号で終わる様にする
    FolderName := IncludeTrailingPathDelimiter(FolderName);

    rc := FindFirst( FolderName+'*.*',faAnyFile,SearchRec );
    while rc=0 do begin
        if (SearchRec.Attr and faDirectory)>0 then begin
            if (SearchRec.Name<>'.') and (SearchRec.Name<>'..') then
                DeleteFolders( FolderName+SearchRec.Name );
        end
        else begin
            fname := FolderName+SearchRec.Name;
            FileSetAttr( fname,faArchive );     {File属性変更}
            DeleteFile( fname );
        end;
        rc := FindNext( SearchRec );
    end;
    FindClose( SearchRec );

    RemoveDir( FolderName );                    {フォルダーの削除}
end;


< サンプル2 >
usesに ShellAPI と StdCtrls を追加する

procedure DeleteFolders(FolderName: string);
var
        foStruct: TSHFileOpStruct;
begin
    //末尾の区切り記号なしでパス名を返す
    FolderName := ExcludeTrailingPathDelimiter(FolderName);

    with foStruct do begin
        wnd    := Form1.Handle;
        wFunc  := FO_DELETE;
        pFrom  := PChar(FolderName+#0);
        pTo    := Nil;
        fFlags := fof_NOCONFIRMATION or FOF_NOCONFIRMMKDIR;
        fAnyOperationsAborted := False;
        hNameMappings     := Nil;
        lpszProgressTitle := Nil;
    end;
    SHFileOperation(foStruct);
end;
      

・インターネット上の情報や書籍の内容を一部参考に作成してます。
・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。
・記述内容に問題点や改善点がありましたらこちらまでお願いします。

サンプル集の一覧に戻る