|
Вопрос # 136/ вопрос открыт / |
|
Доброе время господа программисты. Как в Дельфи удалить папку?
 |
Вопрос задал: Geron (статус: 1-ый класс)
Вопрос отправлен: 20 октября 2006, 00:29
Состояние вопроса: открыт, ответов: 4.
|
Ответ #1. Отвечает эксперт: Dron
Здравствуйте, Stalker!
Очень просто: RmDir('path'). Единственное условие - каталог должен быть пустым, т.е. если он содержит файлы, то сначала нужно удалить их, а только затем сам каталог.
 |
Ответ отправил: Dron (статус: Студент)
Время отправки: 20 октября 2006, 06:50
|
Ответ #2. Отвечает эксперт: min@y™
Советую почитать хэлпоид по функции SHFileOperation() и по структуре SHFILEOPSTRUCT, с которой она работает. В приложении я привожу реализацию удаления каталога (даже непустого), взятую из модуля dwFiles.pas пакета Delphi Works.
Приложение: Переключить в обычный режим- function dwDeleteDirectory(Directory: String; CanUndo, DeleteNotEmpty, GUI: Boolean): Boolean;
- var
- SHFileOpStruct : TSHFileOpStruct;
- FOS_FLAG: DWORD;
- FromBuf, ToBuf: Array [0..255] of Char;
- begin
- result:= FALSE;
- if not DirectoryExists(Directory) then exit;
- if not DeleteNotEmpty then begin
- if not dwDirIsEmpty(Directory) then exit;
- end;
- Fillchar(SHFileOpStruct, Sizeof(SHFileOpStruct), 0);
- FillChar(FromBuf, Sizeof(FromBuf), 0);
- FillChar(ToBuf, Sizeof(ToBuf), 0);
- StrPCopy(FromBuf, Directory);
- StrPCopy(ToBuf, String(''));
- if CanUndo then FOS_FLAG:= FOF_ALLOWUNDO else FOS_FLAG:= 0;
- if not GUI then FOS_FLAG:= FOS_FLAG or FOF_NOCONFIRMATION;
- with SHFileOpStruct do begin
- Wnd:= 0;
- wFunc:= FO_DELETE;
- pFrom:= @FromBuf;
- pTo:= @ToBuf;
- fFlags:= FOS_FLAG;
- end;
- result:= (ShFileOperation(SHFileOpStruct)=0);
- end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 20 октября 2006, 08:24
|
Ответ #3. Отвечает эксперт: sattar
var
SR:TSearchRec;
procedure TForm1.Button1Click(Sender: TObject);
begin
if FindFirst('c:\folder\*.*',faAnyFile,SR)=0 then
repeat
DeleteFile('c:\folder\'+SR.Name)
until FindNext(SR)<>0 ;
FindClose(SR);
RemoveDir('c:\folder\');
 |
Ответ отправил: sattar (статус: 2-ой класс)
Время отправки: 20 октября 2006, 17:51
|
Ответ #4. Отвечает эксперт: Новаковский Юрий Аврамович
Привет Stalker
Очень советую поставить пакет JEDI-VCL,
там есть компонент:
TJvSHFileOperation Copies, moves, renames, or deletes files, while showing the standard Windows progress dialog.
И никаких проблем, удачи Вам.
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|