永发信息网

delphi如何删除目录和目录下的所有文件

答案:4  悬赏:20  手机版
解决时间 2021-04-01 20:12
  • 提问者网友:那叫心脏的地方装的都是你
  • 2021-04-01 17:14
delphi如何删除目录和目录下的所有文件
最佳答案
  • 五星知识达人网友:雪起风沙痕
  • 2021-04-01 17:27
使用递归调用。深入文件夹中删掉文件,然后再删文件夹,然后再逐层返回。

function DeleteFile(mDirName: string; Ext: String = '*'): Boolean;
var
vSearchRec: TSearchRec;
vPathName, tmpExt: string;
K: Integer;
begin
Result := true;
tmpExt := Ext;
if Pos('.', tmpExt) = 0 then
tmpExt := '.' + tmpExt;

vPathName := mDirName + '\*.*';
K := FindFirst(vPathName, faAnyFile, vSearchRec);
while K = 0 do
begin
if (vSearchRec.Attr and faDirectory > 0) and
(Pos(vSearchRec.Name, '..') = 0) then
begin
FileSetAttr(mDirName + '\' + vSearchRec.Name, faDirectory);
Result := DeletePath(mDirName + '\' + vSearchRec.Name, Ext);
end
else if Pos(vSearchRec.Name, '..') = 0 then
begin
FileSetAttr(mDirName + '\' + vSearchRec.Name, 0);
if ((CompareText(tmpExt, ExtractFileExt(vSearchRec.Name)) = 0) or (CompareText(tmpExt, '.*') = 0)) then
Result := DeleteFile(PChar(mDirName + '\' + vSearchRec.Name));
end;
if not Result then
Break;
K := FindNext(vSearchRec);
end;
FindClose(vSearchRec);
end;
全部回答
  • 1楼网友:轻熟杀无赦
  • 2021-04-01 19:29
你可以使用 delphi JVCL JVCL是由超过500个可视及不可视组件组成的库 ,可以参考其中代码
  • 2楼网友:天凉才是好个秋
  • 2021-04-01 19:05
循环可以,我是直接在直写的,可能有语法错误
function deldir(dirname:string):boolean;
var
rs:tsearchrec;
path:string;
begin
result := true;
try
path := dirname;
if path[length(path)] <> '\' then path := path + '\';
if findfirst(path+'*.*',faanyfile,rs) = 0 then begin
repeat
if (rs.name='.')or(rs.name='..') then continue;
if rs.attr or fadirectory = fadirectory then begin
if deldir(path+rs.name) then // 先递归进入这个目录删除里面的文件,在里面findfirst并 findclose
rmdir(path+rs.name); // 退出递归后再删除目录
end else
deletefile(path+rs.name);
until findnext(rs)<>0;
end;
findclose(rs); // 这个一定要
except end;
end;
  • 3楼网友:你可爱的野爹
  • 2021-04-01 17:42
没必要去循环删除,速度很慢,直接调用api就行了,如下,直接在uses shellapi之后,调用SHMyDelDirectory去删除你的目录.
function SHMyDelDirectory(const Source: string): boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_Delete;
pFrom := PChar(Source + #0);
pTo := #0#0;
fFlags := FOF_NOCONFIRMATION + FOF_SILENT;
end;
Result := (SHFileOperation(fo) = 0);
end;追问你这程序不行,该目录正被程序占用,所以不能删除的追答已经测试过的(测试环境 win7 64bit / Delphi 2007),没什么问题,即使是你是我的电脑中打开了这个目录,这个文件夹仍然可以被删除。除非你打开了这个目录下的某个文件追问之前确实有使用目录下的文件,但当我要删除这个目录时,
目录下已为空,还有可能有文件被打开吗?追答你自己去按del删一下这个目录看看,如果这样都不能删,那程序也删不了的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯