Удаление непустой папки

Модератор: Модераторы

Ответить
HiddenByte
незнакомец
Сообщения: 5
Зарегистрирован: 07.04.2011 21:24:02

Удаление непустой папки

Сообщение HiddenByte »

Возник такой вопрос: как удалить непустую папку средствами Lazarus (точнее в коде на FreePascal) ?
Когда раньше писал программы в Delphi, там все просто - DelDir и привет. А здесь что-то никак не могу найти нужную процедуру... подскажите кто знает!
Или надо писать самому, как в Borland Pascal 7.0: удалить все файлы в папке (через рекурсию, например), потом удалить саму папку... а можт все-таки встроенная такая процедура есть? Или надо определить, в какой среде программа запущена (в Windows или Linux), а потом уже через системный API работать? Мне вот как-то больше нравится файловые операции на откуп операционке отдавать, тогда и обработчики ошибок на ней будут. :)
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Если зависимость от LCL допустима, то:

Код: Выделить всё

uses FileUtil;
// ...
DeleteDirectory('directory', False);
http://lazarus-ccr.sourceforge.net/docs ... ctory.html
HiddenByte
незнакомец
Сообщения: 5
Зарегистрирован: 07.04.2011 21:24:02

Сообщение HiddenByte »

Odyssey писал(а):Если зависимость от LCL допустима, то:
DeleteDirectory('directory', False);[/code] http://lazarus-ccr.sourceforge.net/docs ... ctory.html


Попробовал, получилось, работает (по крайней мере в WinXP SP3). Спасибо за подсказку! :)
levchukvv
новенький
Сообщения: 11
Зарегистрирован: 15.05.2014 20:50:39

Сообщение levchukvv »

Подскажите, я не совсем понял как работает эта функция?
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

В чем принципиальное различие работы функций RemoveDirUTF8 и DeleteDirectory?
Ism
энтузиаст
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Сообщение Ism »

Sharfik писал(а):В чем принципиальное различие работы функций RemoveDirUTF8 и DeleteDirectory?

В utf8 имя и путь воспринимаются в utf8, а простая функция принимает параметр в кодировке ОС, в винде это cp1251

Насчет реализации это может быть вызов api системы либо функция удаляющая все пофайлово
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Все что на поверхности написано и видно рассказал, а на вопрос не ответил)))
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

кароч в DeleteDirectory если передашь UTF-8 строку то работать не будет, а если в RemoveDirUTF8 передашь ANSI-строку, то работать не будет. Что не понятного-то
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 836
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Короче)) То что ты говоришь написано в названии самой функции, а вопрос был о разнице их работы. В Delphi есть процедура удаления папки, но только пустой папки. Тут у нас две процедуры, одна трет всю папку, без разбора, включая содержимое, другая отличается от нее передаваемым параметром, но как работает фиг знает. Отследить до конца логику из работы у меня не получилось, плюс нет информации какие модуль в Лазарусе новые, какие старые. Вопрос возник потому что сейчас мне удобно использовать DeleteDirectory, но я не хочу попасть на том, что окажется что это устаревшая функция, которую оставили с первых версий среды или т.п., и что потом когда то ее зарубят, либо она не будет работать в Linux, а только под Windows.
Не хочу изучать Лазарус как в анекдоте - "работает? вот и не трогай!"
Ответить