回 帖 发 新 帖 刷新版面

主题:如何删除一个非空文件夹?

如何删除一个目录下的所有文件和文件夹..............

回复列表 (共4个回复)

沙发

递归的删除其中的文件、子文件夹。
然后删除。所以说没有好的办法。

板凳

一般都用递归。曾经看到过一个现成的函数,但忘记是否亦是用递归了。还有一种办法就是嵌入汇编,在硬盘的FAT中,找到欲删除的目录标记,清除。----南辕北辙了

3 楼

rm -rf dirName

Unix command. 
If you are on windows, you need either installed cygwin or installed unix tool kit.

4 楼

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.


试一试看看行不??

我来回复

您尚未登录,请登录后再回复。点此登录或注册