Консультация № 136574
12.05.2008, 22:45
0.00 руб.
0 2 2
Здравствуйте уважаемые эксперты!
Как можно:
- удалить не пустой каталог на диске (вариант с предварительным поиском и удалением содержимого нежелателен);
- переименовать пустой/не пустой каталог на диске (желательно без физического перемещения содержимого).
Заранее спасибо.

Обсуждение

Неизвестный
13.05.2008, 10:32
общий
это ответ
Здравствуйте, Кабанов Денис Николаевич!

1. Можно воспользоваться консольной командой "rmdir /S/Q <путь к каталогу>". И каталог с содержимым исчезнет без вопросов. Хотя система все равно за вас будет искать и удалять содержимое.

2. Обычные функции API MoveFile/MoveFileEx так и работают (если диски источника и приемника одинаковы).
Неизвестный
13.05.2008, 20:46
общий
это ответ

<i>Здравствуйте, <b>Кабанов Денис Николаевич</b>!</i>

См. примеры функций в приложении.

rmDir - удаление каталога.
mvDir - переименование каталога.

Операции реализованы с помощью системной функции SHFileOperation, описанной в модуле ShellAPI (необходимо прописать в uses).

Установка флагов FOF_NOERRORUI + FOF_NOCONFIRMMKDIR + FOF_SILENT + FOF_NOCONFIRMATION отключает все возможные уведомления пользователя и сообщения об ошибках.

<em>Удачи!</em>

Приложение:
uses ShellAPI;......function rmDir(Dir: string): Boolean;var sh: TSHFileOpStruct;begin if Dir <> ‘‘ then if Dir[Length(Dir)] = ‘\‘ then Delete(Dir, Length(Dir), 1); sh.Wnd:= 0; sh.wFunc:= FO_DELETE; sh.pFrom:= PChar(Dir + #0#0); sh.pTo:= #0#0; sh.fFlags:= FOF_NOERRORUI or FOF_NOCONFIRMMKDIR or FOF_SILENT or FOF_NOCONFIRMATION; sh.hNameMappings:= nil; sh.lpszProgressTitle:= nil; SHFileOperation(sh); Result:= not DirectoryExists(Dir);end;function mvDir(dFrom, dTo: string): Boolean;var sh: TSHFileOpStruct;begin if (dFrom <> ‘‘) then if (dFrom[Length(dFrom)] = ‘\‘) then Delete(dFrom, Length(dFrom), 1); if (dTo <> ‘‘) then if (dTo[Length(dTo)] = ‘\‘) then Delete(dTo, Length(dTo), 1); sh.Wnd:= 0; sh.wFunc:= FO_MOVE; sh.pFrom:= PChar(dFrom + #0#0); sh.pTo:= PChar(dTo + #0#0);; sh.fFlags:= FOF_NOERRORUI or FOF_NOCONFIRMMKDIR or FOF_SILENT or FOF_NOCONFIRMATION; sh.hNameMappings:= nil; sh.lpszProgressTitle:= nil; SHFileOperation(sh); Result:= (not DirectoryExists(dFrom)) and DirectoryExists(dTo);end;
Форма ответа