求:删除C:/WINDOWS下的$*$文件夹源代码 ( 积分: 100 )

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

chaofan201

Unregistered / Unconfirmed
GUEST, unregistred user!
删除C:/WINDOWS下的$*$文件夹怎样实现?
谢谢!
有源代码更好。
遍历C:/WINDOWS/*.*,得到$*$文件名也可。
 
var
sr:tsearchrec;
i:integer;
begin
i:=findfirst('$*$',faanyfile sr);
while i=0 do
begin
deletefile(sr.name);
i:=findenxt(sr);
end;
findclose(sr);
end;

上面我乱写的,要改一下,先将文件名记进stringlist里面,然后再用循环删除,
因为边删除边find好像不怎么规范,删除时检查文件是否存在可以用fileexists()
 
没有回帖,高手哪去了?
 
我不是什么高手,但是还是回一下吧。

function TForm1.AddDirSuffix(Dir: string): string;
begin
Result := Trim(Dir);
if Result = '' then Exit;
if Result[Length(Result)] <> '/' then Result := Result + '/';
end;

function TForm1.DelTree(Dir: string): Boolean;
var
sr: TSearchRec;
fr: Integer;
begin
if not DirectoryExists(Dir) then
begin
Result := True;
Exit;
end;
fr := FindFirst(AddDirSuffix(Dir) + '*.*', faAnyFile, sr);
try
while fr = 0 do
begin
if (sr.Name <> '.') and (sr.Name <> '..') then
begin
if sr.Attr and faDirectory = faDirectory then
Result := Deltree(AddDirSuffix(Dir) + sr.Name)
else
Result := DeleteFile(AddDirSuffix(Dir) + sr.Name);
if not Result then
Exit;
end;
fr := FindNext(sr);
end;
finally
FindClose(sr);
end;
Result := RemoveDir(Dir);
end;
 
两位:表示感谢!
to liyinwei
你的代码删除指定文件夹没有问题。
有没有删除指定文件夹下部分文件夹?比如C:/WINDOWS下的$*$文件夹(C:/WINDOWS下还有其他文件夹不能删除)。
 
不明白!
“比如C:/WINDOWS下的$*$文件夹(C:/WINDOWS下还有其他文件夹不能删除)”
调用
DelTree(C:/WINDOWS/$*$);
不可以吗?
 
就算能用,也不能用在删除WINDOWS下面,因为系统跟本不让你删除这些文件夹.
不能达到效果.
 
WinXP系统中 C:/WINDOWS文件夹下有一些升级补丁备份,如 $NtUninstallKB920213$、$NtUninstallKB923414$、$hf_mig$等文件夹, 都带有$。。。$ 纯属垃圾文件,想用一个语句删除。
下面的代码可以得到文件夹名,而不知怎样删除文件夹。
function FindAllDir(Path: string; AList: TStrings): Integer;
var
F: TSearchRec;
Ret: Integer;
begin
Result := 0;
Ret := FindFirst(Path + '$*$', faAnyFile, F);
while Ret = 0 do
begin
if ((F.Attr and faDirectory) > 0) then
if (F.Name <> '.') and (F.Name <> '..') then
begin
AList.Add(Path + F.Name);
Result := Result + FindAllDir(Path + F.Name + '/', AList);
end;
Ret := FindNext(F);
end;
FindClose(F);
end;

procedure TForm1.Button1Click(Sender: TObject);
var

F:TSearchRec;
i:integer;
begin

FindAllDir('C:/WINDOWS/', Memo1.Lines);
if memo1.Lines.Count<> 0 then //不能完全删除
begin
for i := 0 to Memo1.lines.count-1 do
begin
deletefile(Memo1.lines.Strings[0]);
Memo1.Lines.delete(0);
end;
end;
end;
end.
 
只要楼主结合起来用就可以了。
以下是完整代码
function TForm1.AddDirSuffix(Dir: string): string;
begin
Result := Trim(Dir);
if Result = '' then Exit;
if Result[Length(Result)] <> '/' then Result := Result + '/';
end;

function TForm1.Deltree(Dir: string): Boolean;
var
sr: TSearchRec;
fr: Integer;
begin
if not DirectoryExists(Dir) then
begin
Result := True;
Exit;
end;
fr := FindFirst(AddDirSuffix(Dir) + '*.*', faAnyFile, sr);
try
while fr = 0 do
begin
if (sr.Name <> '.') and (sr.Name <> '..') then
begin
if sr.Attr and faDirectory = faDirectory then
Result := Deltree(AddDirSuffix(Dir) + sr.Name)
else
Result := DeleteFile(AddDirSuffix(Dir) + sr.Name);
if not Result then
Exit;
end;
fr := FindNext(sr);
end;
finally
FindClose(sr);
end;
Result := RemoveDir(Dir);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
F: TSearchRec;
i: integer;
begin
Memo1.Clear;
FindAllDir('C:/Windows/', Memo1.Lines);
for i := Memo1.Lines.Count - 1 downto 0 do begin
Deltree(Memo1.Lines);
Memo1.Lines.Delete(i);
end;
end;

function TForm1.FindAllDir(Path: string; AList: TStrings): Integer;
var
F: TSearchRec;
Ret: Integer;
begin
Result := 0;
Ret := FindFirst(Path + '$*$', faAnyFile, F);
while Ret = 0 do begin
if ((F.Attr and faDirectory) > 0) then begin
if (F.Name <> '.') and (F.Name <> '..') then
AList.Add(Path + F.Name);
end;
Ret := FindNext(F);
end;
FindClose(F);
end;
 
$MSI31Uninstall_KB893803v2$

$NtUninstallKB905495-IE6SP1-20050805.184113$

中间有符号的就删除不了 谁能解决?
 
能删除的..是因为我打开了一个c:/winnt/

我不在那个文件夹下面然后 然后点Button1就删除掉了..
 
谢谢富翁们!
问题已经解决。
 
后退
顶部