PASCAL 刪檔一問

2010-06-25 1:50 am
我想寫一個可以揾到program所在既Directory中既所有野,然後鏟晒佢既program.
但係RUN既時候就只係Delete到Files 同吉既Folder,有野係入面既FOLDER就鏟唔到,請問應該點改,又或者加D乜野呢?

以下係我一D code:

program main;
uses sysutils,crt,dos;
var t1: text;
root,dir,path,target: string;
b: byte;
found:searchrec;
key:char;
///////////////////////////////////////////////////////////////////////
procedure findanddel;
var f:text;
begin
findfirst('*.*',anyfile,found);
while (doserror = 0) do begin
assign(f,found.name);
{$I-}
erase(f);
{$I+}
if (ioresult <> 0) then begin end;
findnext(found);
end;
end;
///////////////////////////////////////////////////////////////////////
(* main body *)
begin
repeat
key:=readkey;
until ((key=#27) or (key=#13));
////////////////////////////////////////////////////////////////////////
if ((key=#13)) then { enter pressed }
begin
getdir(b,dir);
root:=dir;
findanddel;

findfirst('*.*',anyfile,found);
while (doserror = 0) do
begin
path:=(dir+'\'+found.name);
target:=found.name;
{$I-}
rmdir(target);
{$I+}
if ioresult<>0 then begin end;
findnext(found);
end; {while do end}
end; {if then end}
////////////////////////////////////////////////////////////////////////
end. {program end}

回答 (1)

2010-06-25 5:30 am
✔ 最佳答案
rmdir只能刪去空的DIRECTORY,所以你寫的方法要改一改。
PASCAL實現這個程序只須用RECURSIVE的功能就得,簡單,不過難明。
我OUTLINE個方法,你將你的CODE 改一改就得。

其實得一個PROCEDURE就完成:

procedure DeleteAll(X:string);
begin
// 以傳入X為根,自行以FindFirst找出所有檔案
FindFirst(X+'\*.*);
// Loop here for all files
get the file name as ThisFile;
if ThisFile is a file, delete it with DeleteFile(ThisFile)
else
if it is a folder (not including one dot and two dots)
call yourself recursively, i.e. DeleteAll(thisFile+‘\*.*');
end;

在你的主程式,決定用那一個目錄為根,呼叫DeleteAll()就得。


收錄日期: 2021-04-26 11:31:36
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20100624000051KK01076

檢視 Wayback Machine 備份