在DELPHI中怎样删除一个非空目录;(100分)

  • 主题发起人 主题发起人 一剑封喉
  • 开始时间 开始时间

一剑封喉

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI中要删除一个目录,不知道有没有这样的函数。rmdir,removedir,都只能删除空目录。
 
function DelDirectory(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;
记得要uses shellapi
 
修改目录下文件的属性,全部删除后再将该目录删除。
 
找个控件帮忙,[程序员大本营]光碟就应该有.
 

movefileex


包括所有的子目录
若result为0,出错。
剩下的,自己看着办吧
 
terry_lzs的办法最好而且最简单
 
给你一个函数
procedure DoDelTree(TheDir: String);
Var
Search : TSearchRec;
rec : word;
Begin
If TheDir[Length(TheDir)] <> '/' Then TheDir := TheDir + '/';
rec := FindFirst(TheDir + '*.*', faAnyFile, Search);
While rec = 0 Do
Begin
If Search.Name[1] <> '.' Then
Begin
If (Search.Attr And faDirectory) = faDirectory Then
Begin
DoDelTree(TheDir + Search.Name);
RmDir(TheDir + Search.Name);
End
Else
Begin

FileSetAttr(TheDir + Search.Name, 0);
DeleteFile(TheDir + Search.Name);
Application.ProcessMessages;
End;
End;
rec := FindNext(Search);
End;
FindClose(Search);
End;
参数是你要删除的目录名
 
TO terry_lzs ,你的方法我已经试过,只不过没有加#号,不过这样的方法好象只有在程序一次运行中才能好用,当你把程序运行一遍之后,创建了一个非空目录之后,把程序关闭,再启动程序,当选择目录前删除前一次所创建的目录时程序就会出错。提示I/0错误,烦请大侠指教
 
我试过了,没有问题,你就把代码原原本本地拷过去用试试
哪里有创建非空目录?我都没有
 
多人接受答案了。
 
后退
顶部