Delphi,删除包含内容的文件夹

如何解决Delphi,删除包含内容的文件夹

| 当我在文件夹中有子文件夹时-此代码不会删除文件夹...是否有任何错误
procedure TForm.Remove(Dir: String);
var
  Result: TSearchRec; Found: Boolean;
begin
  Found := False;
  if FindFirst(Dir + \'\\*\',faAnyFile,Result) = 0 then
    while not Found do begin
      if (Result.Attr and faDirectory = faDirectory) AND (Result.Name <> \'.\') AND (Result.Name <> \'..\') then Remove(Dir + \'\\\' + Result.Name)
      else if (Result.Attr and faAnyFile <> faDirectory) then DeleteFile(Dir + \'\\\' + Result.Name);
      Found := FindNext(Result) <> 0;
    end;
  FindClose(Result); RemoveDir(Dir);
end;

解决方法

如果您是我,我只会告诉操作系统删除包含所有内容的文件夹。通过写(
uses ShellAPI
var
  ShOp: TSHFileOpStruct;
begin
  ShOp.Wnd := Self.Handle;
  ShOp.wFunc := FO_DELETE;
  ShOp.pFrom := PChar(\'C:\\Users\\Andreas Rejbrand\\Desktop\\Test\\\'#0);
  ShOp.pTo := nil;
  ShOp.fFlags := FOF_NO_UI;
  SHFileOperation(ShOp);
[如果你这样做
  ShOp.fFlags := 0;
相反,您会看到一个不错的确认对话框。如果你这样做
ShOp.fFlags := FOF_NOCONFIRMATION;
您没有得到确认对话框,但是如果操作很长时间,则会得到进度条。最后,如果添加“ 5”标志,则将目录移至“废物箱”,而不是将其永久删除。
ShOp.fFlags := FOF_ALLOWUNDO;
当然,您可以根据需要组合标志:
ShOp.fFlags := FOF_NOCONFIRMATION or FOF_ALLOWUNDO;
将不会显示任何确认信息(但会显示一个进度对话框,因为您未指定
FOF_NO_UI
),并且该目录将被移至废纸and并且不会被永久删除。,最简单的方法是叫
TDirectory.Delete(Dir,True)
。 在ѭ11中发现了
TDirectory
,这是RTL的最新添加。
True
标志传递给
Recursive
参数,这意味着在删除目录之前会显示目录的内容,这是删除目录的重要部分。 在评论中,您告诉我们您使用的是Delphi 7,因此无法使用。 您的代码看起来大部分都很好。但是,您的意思不是:
(Result.Attr and faAnyFile <> faDirectory)
我想你的意思是:
(Result.Attr and faDirectory <> faDirectory)
我可能会这样写:
procedure TMyForm.Remove(const Dir: string);
var
  Result: TSearchRec;
begin
  if FindFirst(Dir + \'\\*\',faAnyFile,Result) = 0 then
  begin
    Try
      repeat
        if (Result.Attr and faDirectory) = faDirectory then
        begin
          if (Result.Name <> \'.\') and (Result.Name <> \'..\') then
            Remove(Dir + \'\\\' + Result.Name)
        end
        else if not DeleteFile(Dir + \'\\\' + Result.Name) then
          RaiseLastOSError;
      until FindNext(Result) <> 0;
    Finally
      FindClose(Result);
    End;
  end;
  if not RemoveDir(Dir) then
    RaiseLastOSError;
end;
,上一次我需要删除包含内容的文件夹时,我使用了JCL:
uses JclFileUtils;

DeleteDirectory(DirToDelete,True);
最后一个参数告诉文件是否应该进入回收站,这是一个不错的选择。,要解决原始问题,请尝试以下操作:
procedure TForm.Remove(const Dir: String);
var
  sDir: String;
  Rec: TSearchRec;
begin
  sDir := IncludeTrailingPathDelimiter(Dir);
  if FindFirst(sDir + \'*.*\',Rec) = 0 then
  try
    repeat
      if (Rec.Attr and faDirectory) = faDirectory then
      begin
        if (Rec.Name <> \'.\') and (Rec.Name <> \'..\') then
          Remove(sDir + Rec.Name);
      end else
      begin
        DeleteFile(sDir + Rec.Name);
      end;
    until FindNext(Rec) <> 0;
  finally
    FindClose(Rec);
  end;
  RemoveDir(sDir);
end; 
,
uses DSiWin32;

DSiDeleteTree(folderName,false);
DSiWin32是一个开放源代码项目,与“按需使用”许可证相关。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?