Q&A

  • 하위 디렉토리와 파일을 모두 지우는 방법좀 알려주세여..
질문> 해당디렉토리와 폴더를 모두 지우는 소스입니다.

그런데 이게 잘 안되네요...

폴더에 파일이 없어도 안되는데...



해당 디렉토리와 파일을 모두 지우는 좋은 방법 있으면

답변부탁드립니다.







procedure TForm1.Button1Click(Sender: TObject);

var

DirInfo: TSearchRec; // 디렉토리의 정보를 나타낸다.

r : Integer;

begin

r := FindFirst('C:DownloadTest*.*', FaAnyfile, DirInfo);

while r = 0 do begin

if ((DirInfo.Attr and FaDirectory <> FaDirectory) and

(DirInfo.Attr and FaVolumeId <> FaVolumeID)) then

if DeleteFile(pChar('C:Downloadtest' + DirInfo.Name)) = false then

ShowMessage('Unable to delete : C:Downloadtest' + DirInfo.Name);

r := FindNext(DirInfo);

end;



SysUtils.FindClose(DirInfo);

if RemoveDirectory('C:DownloadTest') = false then

ShowMessage('Unable to delete direcotry : C:Downloadtest');

end;

2  COMMENTS
  • Profile
    최영근 2001.01.13 02:41
    안녕하세요 ?



    제가 요번에 사용한 루틴입니다.

    이상없이 잘 작동합니다.

    그럼 이만..





    procedure TfrmMain.button1Click(Sender: TObject);

    begin

    if not DirectoryExists('c:test') then begin

    showmessage('폴더가 없어유~~');

    end;



    DelTree('c:test');

    end;





    Function TfrmMain.DelTree(DirName : string): Boolean;

    var

    SHFileOpStruct : TSHFileOpStruct;

    DirBuf : array [0..255] of char;

    begin

    try

    Fillchar(SHFileOpStruct,Sizeof(SHFileOpStruct),0);

    FillChar(DirBuf, Sizeof(DirBuf), 0 );

    StrPCopy(DirBuf, DirName);



    with SHFileOpStruct do begin

    Wnd := 0;

    pFrom := @DirBuf;

    wFunc := FO_DELETE;

    fFlags := FOF_ALLOWUNDO;

    fFlags := fFlags or FOF_NOCONFIRMATION;

    fFlags := fFlags or FOF_SILENT;

    end;

    Result := (SHFileOperation(SHFileOpStruct) = 0);

    except

    Result := False;

    end;

    end;



    ==========================



    파이파이 wrote:

    > 질문> 해당디렉토리와 폴더를 모두 지우는 소스입니다.

    > 그런데 이게 잘 안되네요...

    > 폴더에 파일이 없어도 안되는데...

    >

    > 해당 디렉토리와 파일을 모두 지우는 좋은 방법 있으면

    > 답변부탁드립니다.

    >

    >

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > DirInfo: TSearchRec; // 디렉토리의 정보를 나타낸다.

    > r : Integer;

    > begin

    > r := FindFirst('C:DownloadTest*.*', FaAnyfile, DirInfo);

    > while r = 0 do begin

    > if ((DirInfo.Attr and FaDirectory <> FaDirectory) and

    > (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then

    > if DeleteFile(pChar('C:Downloadtest' + DirInfo.Name)) = false then

    > ShowMessage('Unable to delete : C:Downloadtest' + DirInfo.Name);

    > r := FindNext(DirInfo);

    > end;

    >

    > SysUtils.FindClose(DirInfo);

    > if RemoveDirectory('C:DownloadTest') = false then

    > ShowMessage('Unable to delete direcotry : C:Downloadtest');

    > end;

  • Profile
    xdelphi 2001.01.12 23:40
    파이파이 wrote:

    > 질문> 해당디렉토리와 폴더를 모두 지우는 소스입니다.

    > 그런데 이게 잘 안되네요...

    > 폴더에 파일이 없어도 안되는데...

    >

    > 해당 디렉토리와 파일을 모두 지우는 좋은 방법 있으면

    > 답변부탁드립니다.

    >

    >

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > var

    > DirInfo: TSearchRec; // 디렉토리의 정보를 나타낸다.

    > r : Integer;

    > begin

    > r := FindFirst('C:DownloadTest*.*', FaAnyfile, DirInfo);

    > while r = 0 do begin

    > if ((DirInfo.Attr and FaDirectory <> FaDirectory) and

    > (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then

    > if DeleteFile(pChar('C:Downloadtest' + DirInfo.Name)) = false then

    > ShowMessage('Unable to delete : C:Downloadtest' + DirInfo.Name);

    > r := FindNext(DirInfo);

    > end;

    >

    > SysUtils.FindClose(DirInfo);

    > if RemoveDirectory('C:DownloadTest') = false then

    > ShowMessage('Unable to delete direcotry : C:Downloadtest');

    > end;



    이렇게하시면 한방에 날려버릴 수있는데....!!!!



    WinExec('COMMAND.COM /c deltree/y c:temp', SW_SHOWNORMAL);