一个简单问题,怎么样删除一个文件夹及底下的所有文件?

handsomeI 2003-09-15 10:39:49
Removedir和RemoveDirectory为什么都不行啊?
...全文
236 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
324swf 2003-09-28
  • 打赏
  • 举报
回复
他们认识的嘛
cmain83 2003-09-28
  • 打赏
  • 举报
回复
请楼主解释一下
qxj 2003-09-24
  • 打赏
  • 举报
回复
楼主这是何意?
一句”来了“就得全部的分?
georgehappy 2003-09-24
  • 打赏
  • 举报
回复
来了
IORILI 2003-09-16
  • 打赏
  • 举报
回复
两种方法:


在 uses 部分要包含 shellapi 单元
有以下两种方法可以删除整个目录:

方法一:
procedure TForm1.Button1Click(Sender: TObject);
Var
T:TSHFileOpStruct;
P:String;
begin
P:='C:\WINDOWS\TEMP';//这里改成你要删除的任意目录名
With T do
Begin
Wnd:=0;
wFunc:=FO_DELETE;
pFrom:=Pchar(P);
pTo:=nil;
fFlags:=FOF_ALLOWUNDO+FOF_NOCONFIRMATION+FOF_NOERRORUI;//标志表明允许恢复,无须确认并不显示出错信息
hNameMappings:=nil;
lpszProgressTitle:='正在删除文件夹';
fAnyOperationsAborted:=False;
End;
SHFileOperation(T);
end;

方法二:
procedure TForm1.Button1Click(Sender: TObject);
var
APath: AnsiString;
lpFileOp: TSHFileOpStruct;
begin
APath:='e:\windser\000'#0#0;//指定目录
with lpFileOp do
begin
wnd:=self.handle;
wFunc:=FO_Delete;
pFrom:=PChar(APath);
pTo:=nil;
fFlags:=FOF_AllowUndo;
hNameMappings:=nil;
lpszProgressTitle:=nil;
fAnyOperationsAborted:=true;
end;
if SHFileOperation(lpFileOp)=0 then
ShowMessage('删除成功!')
else
ShowMessage('删除失败!');
end;
handsomeI 2003-09-15
  • 打赏
  • 举报
回复
呵呵,还是用ShFileOperation()比较简单一点
lean77 2003-09-15
  • 打赏
  • 举报
回复
sDir: string;
sr: TSearchRec;

if FindFirst(sDir + '*.*', faAnyFile and not faDirectory, sr) = 0 then begin
repeat
DeleteFile(sDir + sr.Name)
until FindNext(sr) <> 0;
FindClose(sr);
end;

cmain83 2003-09-15
  • 打赏
  • 举报
回复
//------------------------------------------------------------------------------
//
// 在指定的目录中查找指定子目录下的所有文件
// 参数:
// sDir : 指定的目录
// fDir : 指定目录下的子目录
// DirList : 用于保存找到的目录
// FileList : 用于保存找到的文件
//
//------------------------------------------------------------------------------
procedure SearchFile(sDir, fDir: String; var DirList, FileList: TStringList);
var
Found: Integer;
SearchRec: TSearchRec;
begin
Found := FindFirst(sDir + fDir + '\*.*', faAnyFile, SearchRec); //查找所有文件
While Found = 0 do
begin
if SearchRec.Attr = faDirectory then //如果找到的是目录
begin
if (SearchRec.Name = '.') or (SearchRec.Name = '..') then
begin //是 '.' 目录或 '..' 目录
Found := FindNext(SearchRec); //查找下一个
Continue; //返回
end;
DirList.Add(fDir + '\' + SearchRec.Name); //添加目录
//继续查找下一级子目录
SearchFile(sDir, fDir + '\' + SearchRec.Name, DirList, FileList);
Found := FindNext(SearchRec); //查找下一个
Continue;
end;
FileList.Add(fDir + '\' + SearchRec.Name); //添加文件
Found := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;

//---------------------------------------------------------------
//
//例子
//
//---------------------------------------------------------------
var
FileList, PathList: TStringList;
i: Integer;
begin
FileList := TStringList.Create;
PathList := TStringList.Create;
PathList.Clear;
FileList.Clear;
SearchFile('d:\aaa', '', PathList, FileList);
For i := 0 to FileList.Count - 1 do//删除文件
DeleteFile(FileList[i];

For i := PathList.Count - 1 DownTo 0 do
RmDir(PathList[i]);//删除空目录
PathList.Clear;
FileList.Clear;
FileList.Free;
PathList.Freee;
end;
tjff2000 2003-09-15
  • 打赏
  • 举报
回复
Removedir只能删除空文件夹的。
Delphi提供了关于文件操作的许多函数,其中关于目录操作的有目录的创建与删除、设置当前目录、获取当前目录等。目录的删除有函数(Function)RemoveDir和过程(Procedure)RmDir,但它们都只能删除空目录,对于非空目录则不能删除。要实现删除整个目录树(DelTree)必须编写程序来删除其中的子目录和文件。

  目录中的文件可以通过调用函数DeleteFile来删除,但对于特殊文件(只读、系统、隐藏等)则不能有效删除,必须更改文件属性为普通文件才能删除。更改文件属性可以用函数FileSetAttr,这里将特殊文件的属性设置为普通文件属性(属性值为0)。

  考虑到树型目录结构最适合于递归方法,所有这里用递归算法来实现DelTree函数。下面是具体实现程序。

  //path是需删除的目录路径

  //目录成功删除返回True,否则返回False

  function TForm1.Deltree (path : string): Boolean ;

  var

   SearchRec: TSearchRec;

  begin

  //判断目录是否存在

if DirectoryExists(path) then

begin

  //进入该目录,删除其中的子目录和文件

   oldDir := GetCurrentDir;

   ChDir(path);

  //查找目录中所有任何文件

  FindFirst(′.′, faAnyFile, SearchRec);

  repeat

  //修改文件属性为普通属性值

   FileSetAttr(SearchRec.Name,0);

  //如果是目录并且不是.和..则递归调用DelTree

  if(SearchRec.Attr and faDirectory > 0) then

  begin

  if(SearchRec.Name[1]< > ′.′) then

  if(not Deltree(SearchRec.Name)) then

  break;

  end

  //如果是文件直接删除

  else

  if(not DeleteFile(SearchRec.Name))then

  break ;

  //继续查找,直到最后

  until (FindNext(SearchRec)< > 0) ;

  //回到父目录,删除该目录

  ChDir(′..′);

  Result := ReMoveDir(path);

SetCurrentDir(oldDir);

  end

  else

  Result := False ;

  end ;
FrameSniper 2003-09-15
  • 打赏
  • 举报
回复
揭贴!
WWWWA 2003-09-15
  • 打赏
  • 举报
回复
uses ShellAPI
var
p:_shfileopstruct;
a:integer;
begin
p.Wnd:=handle;
p.wFunc:=FO_delete;
p.pFrom:='f:\test'#0#0; //删除f盘的test文件夹
p.pTo:=nil;
p.fFlags:=fof_noconfirmation;
p.fAnyOperationsAborted:=true;
a:=shfileoperation(p);
end;
cmain83 2003-09-15
  • 打赏
  • 举报
回复
先查找到所有的文件,
再删除....

最后删除空目录.

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧