第一个问题不太清楚,估计是写在注册表,或Windows目录下的某个文件夹里。
第二个问题:
{使用这个单元递归调用删除整个目录树}
unit DeleTree;
interface
uses Classes, FileCtrl, SysUtils;
procedure RemoveTree(path: string);
procedure RemoveDirectory(path: string);
procedure GetFileList(FileSpec: string;
; ; ; ; ; ; ; ; ; ; ; ;NamesOnly: Boolean;
; ; ; ; ; ; ; ; ; ; ; ;var FileList: TStringList);
procedure GetSubDirList(DirRoot: string;
; ; ; ; ; ; ; ; ; ; ; ;NamesOnly: Boolean;
; ; ; ; ; ; ; ; ; ; ; ;var SubDirList: TStringList);
function BackSlash(FileSpec: string): string;
function NoBackSlash(FileSpec: string): string;
implementation
{--------------------------------------------------------}
{这个过程删除整个目录树}
procedure RemoveTree(path: string);
var
; SubDirList: TStringList;
; FileList: TStringList;
; i: integer;
begin
; SubDirList := TStringList.Create;
; GetSubDirList(path,False,SubDirList);
; {如果这个树含有子目录,递归调用删除每一个子目录树}
; if SubDirList.Count>0 then
; begin
; ; for i := 0 to SubDirList.Count-1 do
; ; begin
; ; ; RemoveTree(SubDirList);
; ; end;
; end;
; SubDirList.free;
; {到这一步所有的子目录树都已被删除,或者根本不存在。因而你们仅需要删除所有的文件}
; FileList := TStringList.Create;
; GetFileList(BackSlash(path)+'*.*',False,FileList);
; for i := 0 to FileList.Count-1 do
; begin
; ; DeleteFile(PChar(FileList));
; end;
; FileList.Free;
; RemoveDirectory(path);
end;
{--------------------------------------------------------}
{这个过程将删除目录(如果它存在)}
procedure RemoveDirectory(path: string);
var
; Dir: string;
begin
; {删除反斜线(如果它存在)}
; Dir := NoBackSlash(path);
; if DirectoryExists(Dir) then RmDir(Dir);
end;
{--------------------------------------------------------}
{这个过程把所有匹配文件规格的文件名加入一个StringList。如果NamesOnly是true,那么不包含文件路径}
procedure GetFileList(FileSpec: string;
; ; ; ; ; ; ; ; ; ; ; NamesOnly: Boolean;
; ; ; ; ; ; ; ; ; ; ; var FileList: TStringList);
var
; SR: TSearchRec;
; DosError: integer;
begin
; FileList.Clear;
; DosError := FindFirst(FileSpec, faAnyFile-faDirectory, SR);
; while DosError=0 do
; begin
; ; if NamesOnly
; ; ; then FileList.Add(SR.Name)
; ; ; else FileList.Add(ExtractFilePath(FileSpec)+SR.Name);
; ; DosError := FindNext(SR);
; end;
end;
{--------------------------------------------------------}
{这个过程将指定的目录的全部下级目录名加入StringList。如果NamesOnly是true,那么仅仅包括最下级目录名}
procedure GetSubDirList(DirRoot: string;
; ; ; ; ; ; ; ; ; ; ; ; NamesOnly: Boolean;
; ; ; ; ; ; ; ; ; ; ; ; var SubDirList: TStringList);
var
; SR: TSearchRec;
; DosError: integer;
; Root: string;
begin
; SubDirList.Clear;
; {在最后加入一个反斜杠(如果不存在)}
; Root := BackSlash(DirRoot);
; {使用FindFirst/FindNext返回下级目录}
; DosError := FindFirst(Root+'*.*', faDirectory, SR);
; while DosError=0 do
; begin
; ; {don't include the directories . and ..}
; ; if pos('.',SR.Name)<>1 then
; ; begin
; ; ; if SR.Attr=faDirectory then
; ; ; begin
; ; ; ; if NamesOnly
; ; ; ; ; then SubDirList.Add(SR.Name)
; ; ; ; ; else SubDirList.Add(Root+SR.Name);
; ; ; end;
; ; end;
; ; DosError := FindNext(SR);
; end;
end;
{--------------------------------------------------------}
{添加一个反斜杠(如果它不存在)}
function BackSlash(FileSpec: string): string;
begin
; if (FileSpec[length(FileSpec)]<>'/')
; ; ;then Result := FileSpec+'/'
; ; ;else Result := FileSpec;
end;
{删除一个反斜杠(如果它存在)}
function NoBackSlash(FileSpec: string): string;
begin
; if (FileSpec[length(FileSpec)]='/')
; ; ;then Result := Copy(FileSpec,1,length(FileSpec)-1)
; ; ;else Result := FileSpec;
end;
end.