如何删除一个非空文件夹 ( 积分: 50 )

  • 主题发起人 主题发起人 catcatdogdog
  • 开始时间 开始时间
C

catcatdogdog

Unregistered / Unconfirmed
GUEST, unregistred user!
文件夹下面文件很多,而且文件名不规律,在程序中如何用最简单的方法把它删除掉?
 
文件夹下面文件很多,而且文件名不规律,在程序中如何用最简单的方法把它删除掉?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=565841<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=477779
 
2、删除目录 <br><br>删除目录与拷贝目录很类似,但为了能删除位于根目录下的一个空目录,需要在辅助函数中设置一个标志变量,即:如果删除的是空目录,则置bEmptyDir为True,这一句已经用深色框表示了。 <br><br>2.1删除目录的递归辅助函数:DoRemoveDir <br><br>function DoRemoveDir(sDirName:String):Boolean;<br>var<br>  hFindFile:Cardinal;<br>  tfile:String;<br>  sCurDir:String;<br>  bEmptyDir:Boolean;<br>  FindFileData:WIN32_FIND_DATA;<br>begin<br>  //如果删除的是空目录,则置bEmptyDir为True<br>  //初始时,bEmptyDir为True<br>  bEmptyDir:=True;<br>  //先保存当前目录<br>  sCurDir:=GetCurrentDir;<br>  SetLength(sCurDir,Length(sCurDir));<br>  ChDir(sDirName);<br>  hFindFile:=FindFirstFile('*.*',FindFileData);<br>  if hFindFile&amp;lt; &nbsp;&amp;gt; INVALID_HANDLE_VALUE then<br>  begin<br>    repeat<br>       tfile:=FindFileData.cFileName;<br>       if (tfile='.') or (tfile='..') then<br>       begin<br>         bEmptyDir:=bEmptyDir and True;<br>         Continue;<br>       end;<br>       //不是空目录,置bEmptyDir为False<br>       bEmptyDir:=False;<br>       if FindFileData.dwFileAttributes=<br>       FILE_ATTRIBUTE_DIRECTORY then<br>       begin<br>          if sDirName[Length(sDirName)]&amp;lt; &nbsp;&amp;gt; '/' then<br>           DoRemoveDir(sDirName+'/'+tfile)<br>          else<br>           DoRemoveDir(sDirName+tfile);<br>          if not RemoveDirectory(PChar(tfile)) then<br>           result:=false<br>          else<br>           result:=true;<br>       end<br>       else<br>       begin<br>          if not DeleteFile(PChar(tfile)) then<br>           result:=false<br>          else<br>           result:=true;<br>       end;<br>    until FindNextFile(hFindFile,FindFileData)=false;<br>    FindClose(hFindFile);<br>  end<br>  else<br>  begin<br>    ChDir(sCurDir);<br>    result:=false;<br>    exit;<br>  end;<br>  //如果是空目录,则删除该空目录<br>  if bEmptyDir then<br>  begin<br>    //返回上一级目录<br>    ChDir('..');<br>    //删除空目录<br>    RemoveDirectory(PChar(sDirName));<br>  end;<br><br>  //回到原来的目录下<br>  ChDir(sCurDir);<br>  result:=true;<br>end;<br>2.2删除目录的函数:DeleteDir <br><br>function DeleteDir(sDirName:String):Boolean;<br>begin<br>   if Length(sDirName)&amp;lt; &nbsp;=0 then<br>     exit;<br>   //删除...<br>   Result:=DoRemoveDir(sDirName) and RemoveDir(sDirName);<br>end;<br>
 
楼主搜一下一大把
 
<br>用Delphi编写DelTree程序 <br>作者: &nbsp;评价: &nbsp;上站日期: 2002-07-22 &nbsp;<br>内容说明: &nbsp;<br>来源: &nbsp;<br><br>--------------------------------------------------------------------------------<br><br>  Delphi提供了关于文件操作的许多函数,其中关于目录操作的有目录的创建与删除、设置当前目录、获取当前目录等。目录的删除有函数(Function)RemoveDir和过程(Procedure)RmDir,但它们都只能删除空目录,对于非空目录则不能删除。要实现删除整个目录树(DelTree)必须编写程序来删除其中的子目录和文件。 <br><br>  目录中的文件可以通过调用函数DeleteFile来删除,但对于特殊文件(只读、系统、隐藏等)则不能有效删除,必须更改文件属性为普通文件才能删除。更改文件属性可以用函数FileSetAttr,这里将特殊文件的属性设置为普通文件属性(属性值为0)。 <br><br>  考虑到树型目录结构最适合于递归方法,所有这里用递归算法来实现DelTree函数。下面是具体实现程序。 <br><br>  //path是需删除的目录路径 <br><br>  //目录成功删除返回True,否则返回False <br><br>  function TForm1.Deltree (path : string): Boolean ; <br><br>  var <br><br>   SearchRec: TSearchRec; <br><br>  begin <br><br>  //判断目录是否存在 <br><br>if DirectoryExists(path) then <br><br>begin <br><br>  //进入该目录,删除其中的子目录和文件 <br><br>   oldDir := GetCurrentDir; <br><br>   ChDir(path); <br><br>  //查找目录中所有任何文件 <br><br>  FindFirst(′?.?′, faAnyFile, SearchRec); <br><br>  repeat <br><br>  //修改文件属性为普通属性值 <br><br>   FileSetAttr(SearchRec.Name,0); <br><br>  //如果是目录并且不是.和..则递归调用DelTree <br><br>  if(SearchRec.Attr and faDirectory &amp;gt; &nbsp;0) then <br><br>  begin <br><br>  if(SearchRec.Name[1]&amp;lt; &amp;gt; ′.′) then <br><br>  if(not Deltree(SearchRec.Name)) then <br><br>  break; <br><br>  end <br><br>  //如果是文件直接删除 <br><br>  else <br><br>  if(not DeleteFile(SearchRec.Name))then <br><br>  break ; <br><br>  //继续查找,直到最后 <br><br>  until (FindNext(SearchRec)&amp;lt; &amp;gt; 0) ; <br><br>  //回到父目录,删除该目录 <br><br>  ChDir(′..′); <br><br>  Result := ReMoveDir(path); <br><br>SetCurrentDir(oldDir); <br><br>  end <br><br>  else <br><br>  Result := False ; <br><br>  end ; <br><br>  该程序在Windows 98、Delphi 4.0下编译通过。 <br> <br> <br> <br>
 
用SHFileOperation函数把(可能要uses shellapi),所有的文件操作都可以<br>看看delphi的win sdk帮助
 
要函数的话我这里还有个更简单的啊<br>//----------------------删除非空文件夹------------------<br>procedure DeleteDirNotEmpty(DirName: string);<br>var<br> &nbsp;sr: TSearchRec;<br> &nbsp;f: integer;<br>begin<br> &nbsp;if DirName[Length(DirName)] &amp;lt;&amp;gt; '/' then<br> &nbsp; &nbsp;DirName := DirName + '/';<br> &nbsp;f := FindFirst(DirName + '*.*', faAnyFile, sr);<br> &nbsp;while f = 0 do<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;if ((sr.Name &amp;lt;&amp;gt; '.') and (sr.Name &amp;lt;&amp;gt; '..') and (sr.Attr and faVolumeID = 0)) then<br> &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (sr.Attr and faDirectory &amp;lt;&amp;gt; 0) then<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DeleteDirNotEmpty(DirName + sr.Name + '/')<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FileSetAttr(DirName + sr.Name, 0);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if not DeleteFile(DirName + sr.Name) then Exit;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp; &nbsp;f := FindNext(sr);<br> &nbsp; &nbsp;end;<br> &nbsp;FindClose(sr);<br> &nbsp;RemoveDir(DirName);<br>end;<br>算了,还是再找找吧。。。
 
同意太阳火
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
I
回复
0
查看
517
import
I
后退
顶部