질문> 해당디렉토리와 폴더를 모두 지우는 소스입니다.
그런데 이게 잘 안되네요...
폴더에 파일이 없어도 안되는데...
해당 디렉토리와 파일을 모두 지우는 좋은 방법 있으면
답변부탁드립니다.
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;
제가 요번에 사용한 루틴입니다.
이상없이 잘 작동합니다.
그럼 이만..
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;