Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 136

/ вопрос открыт /

Доброе время господа программисты. Как в Дельфи удалить папку?

Geron Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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.

Приложение:
  1. function dwDeleteDirectory(Directory: String; CanUndo, DeleteNotEmpty, GUI: Boolean): Boolean;
  2. var
  3. SHFileOpStruct : TSHFileOpStruct;
  4. FOS_FLAG: DWORD;
  5. FromBuf, ToBuf: Array [0..255] of Char;
  6. begin
  7. result:= FALSE;
  8. if not DirectoryExists(Directory) then exit;
  9. if not DeleteNotEmpty then begin
  10. if not dwDirIsEmpty(Directory) then exit;
  11. end;
  12. Fillchar(SHFileOpStruct, Sizeof(SHFileOpStruct), 0);
  13. FillChar(FromBuf, Sizeof(FromBuf), 0);
  14. FillChar(ToBuf, Sizeof(ToBuf), 0);
  15. StrPCopy(FromBuf, Directory);
  16. StrPCopy(ToBuf, String(''));
  17. if CanUndo then FOS_FLAG:= FOF_ALLOWUNDO else FOS_FLAG:= 0;
  18. if not GUI then FOS_FLAG:= FOS_FLAG or FOF_NOCONFIRMATION;
  19. with SHFileOpStruct do begin
  20. Wnd:= 0;
  21. wFunc:= FO_DELETE;
  22. pFrom:= @FromBuf;
  23. pTo:= @ToBuf;
  24. fFlags:= FOS_FLAG;
  25. end;
  26. result:= (ShFileOperation(SHFileOpStruct)=0);
  27. 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.
И никаких проблем, удачи Вам.

Ответ отправил: Новаковский Юрий Аврамович (статус: 4-ый класс)
Время отправки: 20 октября 2006, 19:02


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.03 сек.