![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
den1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.8.2010 Репутация: нет Всего: нет |
Из папки 'C:\Test\' нужно удалить все файлы подкаталоги (оставив саму папку 'C:\Test\' )
Делаю так:
В целом работает (удаляет из указанной папки все как надо), но если вдруг попадается занятый файл, то выдается сообщение и удаление прекращается. ![]() Как сделать чтобы вместо вывода сообщения - стало - пропустить занятые файлы и продолжить удаление остальных файлов и папок?? Если можно, то пожайлуста внесите нужные изменения в код или дайте примерчик как это сделать! |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
Это сообщение отредактировал(а) kami - 23.8.2010, 12:26 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Никогда не видел, чтобы винда осуществляла такое поведение при удалении папок. Предполагаю, что придется таки самому делать рекурсивный обход и игнорить занятые файлы. Добавлено через 1 минуту и 13 секунд kami, что-то мне подсказывает, что FOF_NOERRORUI просто не выкинет сообщение об ошибке, но реально произведет отмену всей операции. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
den1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.8.2010 Репутация: нет Всего: нет |
Да действительно если написать:
Получается отключение показа сообщение об ошибке, но дальнейшее удаление все равно отменяется!!! ![]() Но как пропустить занятые файлы (и/или папки) ![]() ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
den1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.8.2010 Репутация: нет Всего: нет |
Я конечно извеняюсь, но чем мне поможет "рекурсивный обход дерева каталогов" в данной ситуации, ведь если начать удалять все согластно полученного списка, то все-равно когда SHFILEOPSTRUCT наткнется на занятый файл получится то-же самое ![]() ![]() Это сообщение отредактировал(а) den1977 - 23.8.2010, 14:13 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
А зачем тут SHFILEOPSTRUCT ? Файл/пустую диреторию можно удалить при помощи DeleteFile() . Результат можно совсем не проверять, все что не сможет так и останется. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
den1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.8.2010 Репутация: нет Всего: нет |
Попробовал последовать совету Alexeis Вроде все работает как мне надо, но навсякий случай попробовал выводить перед удалением результаты поиска в memo1 и увидел что имена там отбражаются довольно странно
![]() ![]() Может кто проверит и исправит то, что не так ![]() ![]()
И ксати может кто все-таки поможет с изначальным вопросм по SHFILEOPSTRUCT ![]() Это сообщение отредактировал(а) den1977 - 23.8.2010, 15:51 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
А зачем делать DelAllFind(path+sr.name); для файлов? файл же не папка чтобы его перечислять.
Кроме того DeleteFile(path+sr.name); RemoveDir(path+sr.name+'\'); это что за "двойной удар"? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
den1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.8.2010 Репутация: нет Всего: нет |
Учел замечания Alexeis - мда перестарался я чуток
![]() Вроде так правильнее, пожалуйста проверьте и исправьте если, что не так ![]() Подскажите пожалуйста - заметил, что если файл или папка имеют атрибут "только чтение", то они остаются, что и куда нужно добавить в этот код для удаления файлов или папок независимо от атрибутов? ![]()
PS.: Может кто все-таки поможет с изначальным вопросм по SHFILEOPSTRUCT ![]() Это сообщение отредактировал(а) den1977 - 23.8.2010, 21:43 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Да, есть такое дело, можно перед удалением вызвать SetFileAttributes(path+sr.name, FILE_ATTRIBUTE_NORMAL) -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
den1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.8.2010 Репутация: нет Всего: нет |
При попытке это использовать получил такую ошибку [Pascal Error] Unit1.pas(75): E2010 Incompatible types: 'string' and 'PAnsiChar' А так прошло - SetFileAttributes(PAnsiChar(path+sr.name), FILE_ATTRIBUTE_NORMAL); - так правильно? Это сообщение отредактировал(а) den1977 - 23.8.2010, 21:58 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Ну да, все верно, это я ступил. В MSDN также отмечено про read only файлы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
den1977 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.8.2010 Репутация: нет Всего: нет |
Alexeis и Всем большое спасибо за помощь и участие!!!
![]() Все что хотел получилось !!! ![]() PS.: Но может кто все-таки поможет с изначальным вопросм по SHFILEOPSTRUCT ![]() Теперь уже просто интерестно ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |