![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| szz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
Где тут готовые скрипты валяются? Мне нужна функц, коорая удаляет рекурсивно папку со всем ее содержимым. Функция может использовать только функции из dir.h и stdio.h
Самому лень, чесно говоря, писать (хотя это довольно просто) - я так подумал, что это уже тысячу раз кто-то написал, так почему бы не воспользоваться чьим-то готовым решением? --------------------
|
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Насколько я помню, удалять можно только пустые папки (поправь если ошибаюсь).
Если же папка с файлами, то сначала надо ее очистить, т.е. нужна функция для удаления файлов. В stdio.h, dir.h есть такая функция? --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Вызови system("<здесь в зависимости от твоей операционной системы команда терминала, делающая это.>");
Это самое короткое, что можно придумать. |
|||
|
||||
| szz |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
Разумеется только пустые. Понятно, что есть - надо по всем что внутри рекурсивно побежаться - мне лень ))) Готовую хочу
Мне переносимое надо. Ладно, если так все - напишу и выложу тут для подобных мне лентяев ))) Это сообщение отредактировал(а) szz - 16.7.2005, 15:44 --------------------
|
||||||
|
|||||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
И как она называется? Я не нашел. Это сообщение отредактировал(а) LPBOY - 16.7.2005, 15:57 --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Люди !! Вы глухие?? у меня это одна строчка:
Это в Линуксе. В Винде не так. Вы в командной строке работали?? Вот те команды в system и вставляйте. И не размножайте мозг себе. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Легче исходник из rm вырвать
А почему не делать так: обегаем директорию, удаляя по ходу дела файлы, полные пути директорий заносим в какой-нить массив, потомо его сортируем qsort'ом(std::sort лучше) так, чтобы в вершине массива содержался самый длинный путь(то есть типа {aaa\aaa\aaa, aaa\aaa, aaa}); потом для каждого элемента массива начиная с первого вызываем remove/rmdir. Рекурсивный проход по папке обсуждался на днях. В качестве предиката для сравнения можно использовать типа того:
Добавлено @ 18:46 comcon1 Ты дольше процесс порождать будешь, чем файлы удалять.Не стоит использовать system налево и направо. Он не портируемый. В винде нет rm. Это сообщение отредактировал(а) Mayk - 16.7.2005, 19:14 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Вот наборосок кота для рекурсивного удаления директории по идеи, описанной выше. Для простоты проверка на ошибки опущена и допускается не более 1024 вложенных папок.
В топике выше я слегка погорячился с сортировкой, так как директории всё равно будут проходится от самой не вложенной к самой вложенной, поэтому при просмотре директории её имя можно добавлять к архиву, а потом пройти этот архив от конца к началу удаляя директорию в текущем элементе. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| szz |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
Mayk, ты гений! Спасибо! Прости, что напряг - я и сам мог написать - ленился. Надеюсь, тебе не пришлось это все самому прямо сейчас писать, а ты просто откуда-то стянул - не то мне будет стыдно...
unlink(char *file_to_delete) или его макрос - remove(char *file_to_delete) --------------------
|
||||
|
|||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
szz
Тогда можешь начинать стыдится, потому что я это извлекал из своей памяти - давно что-то подобное писал Кстати, сегодня утром до меня дошло, что заносить в массив директории не стоит - просто добавь в конец remove_all_files строчку rmdir(str);. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| szz |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
Борланд мне ругнулся на строчку
мол, "cannot convert void* to char*" исправил на
и все работает. Ты где компилировал, Mayk? В GCC? --------------------
|
||||||
|
|||||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Ага! Именно. Не в g++. В плюсах проверка типов серьёзная. В борле тоже должно получится, если файл как .c сохранить, а не как .cpp. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |