⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 375.htm

📁 好书啊!很好哦
💻 HTM
字号:
<!-- saved from url=(0022)http://internet.e-mail -->
<html>
<head>
<title>递归调用删除整个目录树                            </title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="inc.css">
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#000000" vlink="195434" alink="195434">

<table width="621" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
      <td width="621"><a href="http://www.CoDelphi.com"><img src="images/logo.gif" border="0" width="153" height="60"><img src="images/bigbanner.gif" border="0" width="468" height="60"></a></td>
    </tr>
  </table><br>
<br>
<table width="621" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr> 
    <td align="left" valign="top" class="font9" height="155"> 
      <div align="center" class="btitle">递归调用删除整个目录树                            <br>
        <br>
      </div>
      <div align="center"><strong>Den Bedard                                        </strong></div>
       
      <b><br>
       摘 要</b>:一个包含删除目录树过程的pascal单元                <br>
      <b> 关键字</b>:删除目录树 删除                                    <br>
      <b> 类 别</b>:文件操作                                           
      <hr size="1" width="100%">
      <span class="content"><br>{使用这个单元递归调用删除整个目录树} <br><br><br>unit DeleTree; <br><br>interface <br>uses Classes, FileCtrl, SysUtils; <br><br>procedure RemoveTree(path: string); <br>procedure RemoveDirectory(path: string); <br>procedure GetFileList(FileSpec: string;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NamesOnly: Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var FileList: TStringList); <br>procedure GetSubDirList(DirRoot: string;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NamesOnly: Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var SubDirList: TStringList); <br>function BackSlash(FileSpec: string): string; <br>function NoBackSlash(FileSpec: string): string; <br><br>implementation <br><br>{--------------------------------------------------------} <br>{这个过程删除整个目录树} <br>procedure RemoveTree(path: string); <br>var<br>&nbsp;&nbsp;SubDirList: TStringList;<br>&nbsp;&nbsp;FileList: TStringList;<br>&nbsp;&nbsp;i: integer; <br>begin<br>&nbsp;&nbsp;SubDirList := TStringList.Create;<br>&nbsp;&nbsp;GetSubDirList(path,False,SubDirList);<br>&nbsp;&nbsp;{如果这个树含有子目录,递归调用删除每一个子目录树}<br>&nbsp;&nbsp;if SubDirList.Count>0 then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;for i := 0 to SubDirList.Count-1 do<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RemoveTree(SubDirList[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;SubDirList.free;<br>&nbsp;&nbsp;{到这一步所有的子目录树都已被删除,或者根本不存在。因而你们仅需要删除所有的文件}<br>&nbsp;&nbsp;FileList := TStringList.Create;<br>&nbsp;&nbsp;GetFileList(BackSlash(path)+'*.*',False,FileList);<br>&nbsp;&nbsp;for i := 0 to FileList.Count-1 do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;DeleteFile(PChar(FileList[i]));<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;FileList.Free;<br>&nbsp;&nbsp;RemoveDirectory(path); <br>end; <br><br><br>{--------------------------------------------------------} <br>{这个过程将删除目录(如果它存在)} <br>procedure RemoveDirectory(path: string); <br>var<br>&nbsp;&nbsp;Dir: string; <br>begin<br>&nbsp;&nbsp;{删除反斜线(如果它存在)}<br>&nbsp;&nbsp;Dir := NoBackSlash(path);<br>&nbsp;&nbsp;if DirectoryExists(Dir) then RmDir(Dir); <br>end; <br><br>{--------------------------------------------------------} <br>{这个过程把所有匹配文件规格的文件名加入一个StringList。如果NamesOnly是true,那么不包含文件路径} <br>procedure GetFileList(FileSpec: string;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NamesOnly: Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var FileList: TStringList); <br>var<br>&nbsp;&nbsp;SR: TSearchRec;<br>&nbsp;&nbsp;DosError: integer; <br>begin<br>&nbsp;&nbsp;FileList.Clear;<br>&nbsp;&nbsp;DosError := FindFirst(FileSpec, faAnyFile-faDirectory, SR);<br>&nbsp;&nbsp;while DosError=0 do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;if NamesOnly<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then FileList.Add(SR.Name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else FileList.Add(ExtractFilePath(FileSpec)+SR.Name);<br>&nbsp;&nbsp;&nbsp;&nbsp;DosError := FindNext(SR);<br>&nbsp;&nbsp;end; <br>end; <br><br>{--------------------------------------------------------} <br>{这个过程将指定的目录的全部下级目录名加入StringList。如果NamesOnly是true,那么仅仅包括最下级目录名} <br>procedure GetSubDirList(DirRoot: string;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NamesOnly: Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var SubDirList: TStringList); <br>var<br>&nbsp;&nbsp;SR: TSearchRec;<br>&nbsp;&nbsp;DosError: integer;<br>&nbsp;&nbsp;Root: string; <br>begin<br>&nbsp;&nbsp;SubDirList.Clear;<br>&nbsp;&nbsp;{在最后加入一个反斜杠(如果不存在)}<br>&nbsp;&nbsp;Root := BackSlash(DirRoot);<br>&nbsp;&nbsp;{使用FindFirst/FindNext返回下级目录}<br>&nbsp;&nbsp;DosError := FindFirst(Root+'*.*', faDirectory, SR);<br>&nbsp;&nbsp;while DosError=0 do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;{don't include the directories . and ..}<br>&nbsp;&nbsp;&nbsp;&nbsp;if pos('.',SR.Name)<>1 then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if SR.Attr=faDirectory then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if NamesOnly<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then SubDirList.Add(SR.Name)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else SubDirList.Add(Root+SR.Name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;DosError := FindNext(SR);<br>&nbsp;&nbsp;end; <br>end; <br><br>{--------------------------------------------------------} <br>{添加一个反斜杠(如果它不存在)} <br>function BackSlash(FileSpec: string): string; <br>begin<br>&nbsp;&nbsp;if (FileSpec[length(FileSpec)]<>'\')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then Result := FileSpec+'\'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else Result := FileSpec; <br>end; <br><br>{删除一个反斜杠(如果它存在)} <br>function NoBackSlash(FileSpec: string): string; <br>begin<br>&nbsp;&nbsp;if (FileSpec[length(FileSpec)]='\')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then Result := Copy(FileSpec,1,length(FileSpec)-1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else Result := FileSpec; <br>end; <br><br>end.</span> 
      <table border="0" cellspacing="0" cellpadding="1" class="font9" align="center" width="100%">
        <tr align="left" valign="middle" bgcolor="195434"> 
          <td height="1"></td>
        </tr>
      </table>
     
    </td>
  </tr>
  <tr> 
    <td bgcolor="#C9C9C6" height="2"></td>
  </tr>
</table>
<div align="center"><br>
  中文开发在线<a href="http://www.codelphi.com" target="_blank">www.codelphi.com</a>授权使用。
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -