예전에 언인스톨러를 만들때 만들었던 루틴입니다. 참고바랍니다.
알려진 버그(?)는 파일의 속성이 노말이어야 합니다. 리드온리 속성이 되어 있으면
파일은 지워지지 않습니다. 이러한 파일까지 지우려면 속성 먼저 셋팅하면 되겠죠?
그리고 특정한 폴더내의 파일을 지우고 그 폴더까지 삭제 합니다. 물론 하위폴더가 있다면
지워지지 않습니다. 하위폴더까지 지우려면 ^^ 잘 생각해서 만들어보세요.
BOOL fnEraseFilesWithCurFolder( AnsiString _ansiSubFolder )
{
BOOL bResult = TRUE;
BOOL bDeleted = FALSE;
TSearchRec SearchRec;
AnsiString ansiChkChar = "\\";
AnsiString ansiSrcChar = _ansiSubFolder.SubString( _ansiSubFolder.Length(), 1 );
if( ansiSrcChar.AnsiCompare(ansiChkChar) != 0 ){
_ansiSubFolder.Insert( ansiChkChar, _ansiSubFolder.Length() + 1);
}
if( FindFirst( _ansiSubFolder + "*.*", faAnyFile, SearchRec) == 0 ){
do {
if( SearchRec.Attr != faDirectory ){
#ifdef DEBUG
ShowMessage( SearchRec.Name );
#endif
bDeleted = DeleteFile( _ansiSubFolder + SearchRec.Name );
if( !bDeleted ){
bResult = bDeleted;
}
}
} while( FindNext(SearchRec) == 0 );
FindClose( SearchRec );
RmDir( _ansiSubFolder );
}
return( bResult );
}
박진훈 님이 쓰신 글 :
: 1. SHFileOperation함수 이용
:
http://www.delmadang.com/cwb-bin/CrazyWWWBoard.exe?db=dmdqa&mode=read&num=21180&page=1&backdepth=1
:
:
: 2. RemoveDirectory함수를 사용
:
:
: 3. FindFirst, FindNext, FindClose를 이용해서 일일히 파일을 삭제.