用Delphi递归删除文件夹的问题

问题描述 投票:0回答:1

我在互联网上找到了以下例程,将其删除到

recycle bin
一些包含文件和其他文件夹的文件夹。除非有
zip file
,否则它工作正常。然后它会给我错误 120(= 不支持此功能),即使我将扩展名从
zip
更改为例如
bck
。我猜该函数将 zip 文件视为文件夹,但它无法处理它并引发错误。 有谁知道我该如何克服这个问题?

function recycleFile(fileName: string): boolean;
var
    fos: TSHFileOpStruct;
    erNo : integer;
begin
    setlength(fileName, length(fileName) + 1);
    fileName[length(fileName)] := #0;
    FillChar(fos, SizeOf(fos), 0);
    with fos do
    begin
        wFunc := FO_DELETE;
        pFrom := PChar(fileName);
        fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_NOERRORUI;
    end;
    erNo := ShFileOperation(fos);
    if erNo <> 0 then showmessage(intToStr(erNo));

    result := erNo = 0;
end;
delphi delete-file
1个回答
2
投票

此代码适用于我(在 Windows 11 上使用 Delphi 12):

function DeleteDirectory(const ADirectory: string): Boolean;
var
  LShFileOp: TSHFileOpStruct;
begin
  FillChar(LShFileOp, SizeOf(LShFileOp), 0);
  LShFileOp.wFunc := FO_DELETE;
  LShFileOp.pFrom := PChar(ADirectory + #0);
  LShFileOp.pTo := nil;
  LShFileOp.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
  Result := SHFileOperation(LShFileOp) = 0;
end;

它可以包括包含 .zip 文件的文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.