我试过 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 – 删除具有非空子目录和文件的目录所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)