delphi – 删除具有非空子目录和文件的目录

delphi – 删除具有非空子目录和文件的目录,第1张

概述如何删除一个包含某些文件和一些非空子目录的目录. 我试过 SHFileOperation Function.它在 Windows 7有一些兼容性问题. 然后我尝试了 IFileOperation Interface.但它在Windows XP中不兼容. 然后我按照 David Heffernan的建议尝试了以下代码: procedure TMainForm.BitBtn01Click(Sender 如何删除一个包含某些文件和一些非空子目录的目录.
我试过 SHFileOperation Function.它在 Windows 7有一些兼容性问题.
然后我尝试了 IFileOperation Interface.但它在windows XP中不兼容.
然后我按照 David Heffernan的建议尝试了以下代码:

procedure TMainForm.BitBtn01Click(Sender: TObject);var  fileAndDirectoryExist: TSearchRec;  ResourceSavingPath : string;begin  ResourceSavingPath := (Getwindir) + 'Web\Wallpaper\';  if FindFirst(ResourceSavingPath + '\*',faAnyfile,fileAndDirectoryExist) = 0 then  try    repeat      if (fileAndDirectoryExist.name <> '.') and (fileAndDirectoryExist.name <> '..') then        if (fileAndDirectoryExist.Attr and faDirectory) <> 0 then          //it's a directory,empty it          ClearFolder(ResourceSavingPath +'\' + fileAndDirectoryExist.name,mask,recursive)        else          //it's a file,delete it          Deletefile(ResourceSavingPath + '\' + fileAndDirectoryExist.name);    until FindNext(fileAndDirectoryExist) <> 0;    //Now that this directory is empty,we can delete it    RemoveDir(ResourceSavingPath);  finally    FindClose(fileAndDirectoryExist);  end;end;

但它没有在ClearFolder,掩码和递归中编译提到错误为Undeclared IDentifIEr.我的要求是“如果WALLPAPER文件夹下存在任何子文件夹,它将被删除”.相同的子文件夹可以包含任意数量的非空子文件夹或文件.

解决方法 好吧,首先,SHfileOperation在windows 7或windows 8上没有兼容性问题.是的,现在建议您使用IfileOperation.但是如果你想支持像XP这样的旧 *** 作系统,那么你可以而且应该只调用SHfileOperation.它工作并将继续工作.在windows 7和windows 8上使用它是完全正常的,如果它从windows中删除,我会吃掉我的帽子.微软竭尽全力保持向后兼容性.因此,在我看来,SHfileOperation是您的最佳选择.

您的基于FindFirst的方法失败,因为您需要将其放在单独的函数中以允许递归.我在其他答案中发布的代码不完整.这是一个完整的版本:

procedure DeleteDirectory(const name: string);var  F: TSearchRec;begin  if FindFirst(name + '\*',F) = 0 then begin    try      repeat        if (F.Attr and faDirectory <> 0) then begin          if (F.name <> '.') and (F.name <> '..') then begin            DeleteDirectory(name + '\' + F.name);          end;        end else begin          Deletefile(name + '\' + F.name);        end;      until FindNext(F) <> 0;    finally      FindClose(F);    end;    RemoveDir(name);  end;end;

这将删除目录及其内容.您需要遍历顶级目录,然后为找到的每个子目录调用此函数.

总结

以上是内存溢出为你收集整理的delphi – 删除具有非空子目录和文件的目录全部内容,希望文章能够帮你解决delphi – 删除具有非空子目录和文件的目录所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1268798.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存