使用SHFileOperation删除文件

今天使用SelectDirectory选择文件夹,用SHFileOperation来删除文件夹,一直都报错,蛋疼了老半天,原来是SelectDirectory之后就将当前目标设为SelectDirectory选择的目录了,所以删除时就会报“文件夹正在使用,不能删除”,最后用在调用SelectDirectory之后,再用SetCurrentDir将当前目录设为“C:\”就Ok了。

procedure TForm1.DeleteDirectoryTree(AHandle: THandle; const ADelDir: string);
var
  SHFileOpStruct: TSHFileOpStruct;
  DelDir: PChar;
  DirLen: Integer;
begin
  DirLen := Length(ADelDir) + 2;
  GetMem(DelDir, DirLen);
  try
    FillChar(DelDir^, DirLen, #0);
    StrCopy(DelDir, PChar(ADelDir));

    with SHFileOpStruct do
    begin
      Wnd     := AHandle;
      wFunc   := FO_DELETE;
      pFrom   := DelDir;
      pTo     := nil;
      fFlags  := FOF_ALLOWUNDO;
      fAnyOperationsAborted := False;
      hNameMappings := nil;
      lpszProgressTitle := nil;

      if SHFileOperation(SHFileOpStruct) <> 0 then
        RaiseLastWin32Error;
    end;
  finally
    FreeMem(DelDir, DirLen);
  end;

end;

function TForm1.GetDirectory: string;
var
  CurDir: string;
begin
  CurDir := 'C:\';

  // if call SelectDirectory, then set current directory is result
  // so if don't set current directory, can not delete the folder
  if not SelectDirectory(Result, [], 0) then
    Result := EmptyStr;

  SetCurrentDir(CurDir);
end;

转载于:https://www.cnblogs.com/Delphi2011/archive/2011/07/13/2105168.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值