델파이를 공부 하는 학생입니다.
폴더를 삭제를 할려고 하는데 삭제가 안되더라구여
디렉토리리스트박스로 폴더를 찾아가서 폴더 삭제 버튼을
누르면 삭제가 되지 않습니다.
이유인 즉, 현재 실행 되고 있는 델파이 프로그램 자체가
디렉토리 리스트 박스로 찾아가서 사용 하고 있기 때문에
사용중인 폴더를 삭제를 할수 없다는 내용입니다
그냥 경로를 직접 입력해서 삭제는 가능한데
디렉토리 리스트 박스를 사용해서
폴더를 삭제 할수 있는 방법을 알고 싶습니다.
밑에는 소스입니다
<소스>
uses : ShellAPI;
//------------------폴더 삭제를 위한 선언 시작
Function DelTree(DirName : string): Boolean;
{
Completely deletes a directory regardless
of whether the directory is filled or has
subdirectories. No confirmation is requested
so be careful. If the operation is successful
then True is returned, False otherwise
}
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;
//------------------폴더 삭제를 위한 선언 끝
//------------------폴더 삭제 버튼 시작
procedure TForm1.BitBtn2Click(Sender: TObject);
var
button : integer;
Fname, s : string;
DirInfo: TSearchRec;
r : Integer;
begin
button := Application.MessageBox('선택하신 앨범을 삭제하시겠습니까?',
'앨범 삭제', mb_YesNo + MB_DefButton1);
if button = IdYes then
begin
if DelTree(DirectoryListBox2.Directory) then
ShowMessage('Directory deleted!')
else
ShowMessage('Errors occured!');
end;
DirectoryListBox2.Update;
end;
//------------------폴더 삭제 버튼 끝
안녕하셔요..
진짜루 DirectoryListBox 를 사용하니 지워지지 않더군요.
그래서 한줄만 바꾸어 보왔습니다. 잘 지워지더군요.
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_WANTMAPPINGHANDLE; // 이부분만 바꾸었답니다.
fFlags := fFlags or FOF_NOCONFIRMATION;
fFlags := fFlags or FOF_SILENT;
end;
Result := (SHFileOperation(SHFileOpStruct) = 0);
except
Result := False;
end;
end;
좋은 하루 되셔요