제 문제는...
하위 디렉토리들과 파일들을 한방에 날려야 하거든요...
Rx tools의 FileUtils.pas의 일부를 꺼내서 사용하려고 하는데...
하위 디렉토리들의 파일들은 다 지워지는데...
디렉토리는 지워지지 않더라구여...
아래의 소스를 보면...
function TFileUtilForm.ClearDir(const Path: string; Delete: Boolean): Boolean;
var
FileInfo: TSearchRec;
DosCode: Integer;
begin
Result := DirExists(Path);
if not Result then Exit;
DosCode := FindFirst(NormalDir(Path) + '*.*', faAnyFile, FileInfo);
try
while DosCode = 0 do begin
if (FileInfo.Name[1] <> '.') and (FileInfo.Attr <> faVolumeID) then
begin
if (FileInfo.Attr and faDirectory = faDirectory) then
Result := ClearDir(NormalDir(Path) + FileInfo.Name, Delete) and Result
else if (FileInfo.Attr and faVolumeID <> faVolumeID) then begin
if (FileInfo.Attr and faReadOnly = faReadOnly) then
FileSetAttr(NormalDir(Path) + FileInfo.Name, faArchive);
Result := DeleteFile(NormalDir(Path) + FileInfo.Name) and Result;
end;
end;
DosCode := FindNext(FileInfo);
end;
if Delete and Result and (DosCode = -18) and not ((Length(Path) = 2) and (Path[2] = ':')) then
// 이부분이 이상하구여... DosCode 가 -18 이면 무슨 뜻이에여? 18 아닌가여?
// -18을 18로 바꾸면... 디렉토리를 지우려다가 에러가 발생합니다. 도와주시면 정말로 감사하겠습니다...
begin
RmDir(Path);
Result := (IOResult = 0) and Result;
end;
finally
FindClose(FileInfo);
end;
end;
다른 방법들도 좋으니깐여...
도움좀 주세여... ^^
var
fos : TSHFileOpStruct;
begin
FillChar(fos,SizeOf(fos),0);
with fos do
begin
wFunc := FO_MOVE;
pFrom := PChar(sFileName);
fFlags := FOF_WANTMAPPINGHANDLE or FOF_NOCONFIRMATION or FOF_SILENT;
end;
Result := ( 0 = ShFileOperation(fos));
end;