Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Некоторые файлы не удаляются средствами C++/WinAPI |
Автор: crYon 27.6.2018, 20:34 | ||
Здравствуйте. Столкнулся со странной проблемой. Имеется некий самодельный инсталлятор на чистом С++/WinAPI, который из zip-архива, содержащегося в ресурсе exe-шника, разархивирует группу файлов в указанный каталог. При этом, если файлы существуют, сначала он их удаляет (для эксперимента даже сделал поочередно удаление функцией DeleteFile из WinBase.h и функцией remove из stdio.h). Обнаружил, что по прошествии определенного времени (более месяца) существующие файлы перестают удаляться, функция DeleteFile не отрабатывает, а код системной ошибки GetLastError равен 0x5 ("отказано в доступе"). При этом, если проинсталлировать файлы в другой каталог, а потом сразу же попробовать проинсталлировать в него же повторно, то все файлы успешно удаляются и пересоздаются. Т.е. DeleteFile отрабатывает. Я также сравнил свойства файла, который не может быть удален, со свойствами файла, который успешно удаляется, и не обнаружил никаких различий во вкладке "безопасность" между правами на файл для групп и пользователей. Компьютер не в домене, пользователь всего один, и учетная запись не менялась уже несколько лет. Никаких действий с учетной записью тоже не проводилось. Инсталлятор использует библиотеку XUnzip с открытым кодом, и я проверил, что при разархивировании файлы создаются следующим вызовом функции:
Между тем, файлы, которые создавались моим инсталлятором, но в последствии не могут быть им удалены/пересозданы, спокойно удаляются любым другим способом - через проводник или, например, Total Commander. Проблема не только на моем компьютере, но и на многих других компьютерах. Как минимум, она повторяется на WinXP, Win7 и Win10. Посоветуйте, пожалуйста, на что обратить внимание. Может, есть версии возможных причин. Спасибо. |
Автор: Romikgy 27.6.2018, 21:26 |
скорее всего установка была из под прав администратора , а удаление без них |
Автор: crYon 27.6.2018, 21:46 | ||
Нашел причину. Не заметил сразу, что на файлах появились атрибуты "только для чтения". Откуда они взялись, я не знаю, но теперь перед удалением файлов я делаю вызов
и все нормально удаляется. |