主题:如何删除一个非空文件夹?
huitian
[专家分:1410] 发布于 2006-08-04 09:04:00
如何删除一个目录下的所有文件和文件夹..............
回复列表 (共4个回复)
沙发
linxuanxu [专家分:9360] 发布于 2006-08-04 09:09:00
递归的删除其中的文件、子文件夹。
然后删除。所以说没有好的办法。
板凳
长尾兔 [专家分:3630] 发布于 2006-08-05 00:18:00
一般都用递归。曾经看到过一个现成的函数,但忘记是否亦是用递归了。还有一种办法就是嵌入汇编,在硬盘的FAT中,找到欲删除的目录标记,清除。----南辕北辙了
3 楼
justforfun626 [专家分:18460] 发布于 2006-08-05 11:36:00
rm -rf dirName
Unix command.
If you are on windows, you need either installed cygwin or installed unix tool kit.
4 楼
ILikePromgram [专家分:190] 发布于 2006-08-09 22:18:00
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//删除文件夹函数
procedure DelMyDir(aDir: String; dDel: Boolean);
var
i: Integer;
aFsr: TSearchRec;
dLst: TStrings;
str: String;
begin
if not DirectoryExists(aDir) then Exit;
dLst := TStringList.Create;
i := FindFirst(aDir + '*.*', faAnyFile, aFsr);
while i = 0 do
begin
if (aFsr.Attr and faDirectory) <> 0 then //如果文件属性是文件夹
begin
if (aFsr.Name <> '.') and (aFsr.Name <> '..') then
dLst.Add(aDir + aFsr.Name + '\') //将文件夹的路径保存我List中
end
else //如果是文件直接删除
DeleteFile(aDir + aFsr.Name);
i := FindNext(aFsr);
end; //循环查找下一个
FindClose(aFsr);
//在次将List中的文件夹一个一个删除
for i := 0 to Pred(dLst.Count) do
begin
str := ExpandFileName(dLst[i]);
if (Pos(aDir, str) = 1) and (Length(str) > Length(aDir)) then
DelMyDir(dLst[i], True);
end;
dLst.Free;
if dDel then RemoveDir(aDir); //删除一个空目录
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DelMyDir('D:\111\', true); //例如要删除的文件为D盘下的111文件夹
end;
end.
试一试看看行不??
我来回复