| 
| 
 | Вопрос # 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 varSR: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.
 И никаких проблем, удачи Вам.
 
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |