Название: [РЕШЕНО] QFile FileError Отправлено: OKTA от Июль 30, 2014, 10:10 Товарищи, пытаюсь вероломно удалить файл, но remove() возвращает false, а error() NoError, errorString() - Unknown error. Разве это человечно? Где справедливость? ;D
Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 10:12 1. Покажи кот.
2. ОС? 3. Удаляется другими средствами? Название: Re: QFile FileError Отправлено: OKTA от Июль 30, 2014, 10:17 Удаляю без всяких хитростей. Ос - Win7. DeleteFileA так же ноль эмоций.
Вот весь код: Код: QFile file("D:/test/test.dll"); Только сейчас попробовал - текстовые файлы удаляет норм :o Забыл скопипастить remove, пардон) Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 10:18 Эм. А где удаление через QFile? Если в эксплорере удалить? Если удалить через статический метод QFile::remove?
Название: Re: QFile FileError Отправлено: OKTA от Июль 30, 2014, 10:22 Кажется нашел проблему. Все проще - права..
Выдает QFlags(0x4|0x40|0x400|0x4000) - вроде как только чтение разрешено как раз. Название: Re: QFile FileError Отправлено: OKTA от Июль 30, 2014, 10:23 GetLastError - 0 >:(
Название: Re: QFile FileError Отправлено: OKTA от Июль 30, 2014, 10:27 Выставил перед удалением file.setPermissions(QFile::WriteOther); и удалился как надо!
Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 10:27 Кажется нашел проблему. Все проще - права.. Права файла не имеют никакого отношения к возможности его удалить. За удаление отвечают права каталога, в котором находится файл.Выдает QFlags(0x4|0x40|0x400|0x4000) - вроде как только чтение разрешено как раз. Из эксплорера удалить можно его? Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 10:29 Выставил перед удалением file.setPermissions(QFile::WriteOther); и удалился как надо! Возможно, это косвенно помогло. Попробуй не создавать объекта:Код
Название: Re: QFile FileError Отправлено: OKTA от Июль 30, 2014, 10:36 Из эксплорера удаляется, статический метод не удаляет.
Нашел в http://technet.microsoft.com/en-us/library/bb727008.aspx следующее - If a user has full control over a folder, the user can delete files in the folder regardless of the permission on the files. Значит права файла тоже имеют отношение к удалению по всей видимости. Но все равно непонятно. В Qt поставил права на изменение, а судя по таблице 13-4 в ссылке на technet, удаление возможно только при FullModify и Execute ??? Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 10:45 Ты правильно перевел?
"Если пользователь имеет полный доступ к каталогу, пользователь может удалить файл независимо от прав доступа к файлу". Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 10:46 Версия Кьюта какая?
Название: Re: QFile FileError Отправлено: OKTA от Июль 30, 2014, 10:53 Ой точно, невнимательность..
Ну тогда это точно причина не в правах к папке, т.к. другой созданный в этой папке файл удаляется нормально, а во вкладке "безопасность" права у всех файлов одинаковые ??? Ничего не понимаю ??? Qt - 4.7.4 Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 10:55 Как вариант - кто-то держит этот файл. По логике, файл может быть открыт где-то еще в проге?
Может еще антивирь мешать. Поискал на багктрекере, ничего такого не нашел. Название: Re: QFile FileError Отправлено: Alex Custov от Июль 30, 2014, 11:08 Кажется нашел проблему. Все проще - права.. Права файла не имеют никакого отношения к возможности его удалить. За удаление отвечают права каталога, в котором находится файл.Выдает QFlags(0x4|0x40|0x400|0x4000) - вроде как только чтение разрешено как раз. В винде read-only права имеют значение (в отличие от Linux). Не знаю, защита ли это на уровне ОС, или просто защита от дурака в DeleteFile(), но в документации чётко написано: "To delete a read-only file, first you must remove the read-only attribute" (http://msdn.microsoft.com/en-us/library/windows/desktop/aa363915%28v=vs.85%29.aspx) Название: Re: QFile FileError Отправлено: Alex Custov от Июль 30, 2014, 11:11 Нашел в http://technet.microsoft.com/en-us/library/bb727008.aspx следующее - If a user has full control over a folder, the user can delete files in the folder regardless of the permission on the files. Значит права файла тоже имеют отношение к удалению по всей видимости. Это документация для пользователя десктопа, методы API могу вести себя по-другому. Тот же эксплорер наверняка снимает read-only атрибут перед удалением. Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 11:13 "If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED." почему же тогда lastError вернуло 0?
Название: Re: QFile FileError Отправлено: Пантер от Июль 30, 2014, 11:14 Масдай он такой масдай. :)
Тогда для винды нужно права все таки менять. Название: Re: QFile FileError Отправлено: Alex Custov от Июль 30, 2014, 11:19 "If the file is a read-only file, the function fails with ERROR_ACCESS_DENIED." почему же тогда lastError вернуло 0? может оригинальный код не совсем такой как скопипащен сюда, либо бага в винде. У меня, например, нормально: Код
печатает Цитировать 0 5 где 5 - ERROR_ACCESS_DENIEDНазвание: Re: QFile FileError Отправлено: OKTA от Июль 30, 2014, 11:22 Нет, оригинальный код именно такой - лишнего ничего нет - в пустом проекте пытаюсь удалять.
Ну, раз надо снимать readOnly, то QFile::WriteOther видимо это и делает. Название: Re: QFile FileError Отправлено: Alex Custov от Июль 30, 2014, 11:24 Я тут подумал что вероятно это баг всё-таки в Qt, если он error() возвращает как NoError. Попробуй на 4.8.6.
Название: Re: QFile FileError Отправлено: OKTA от Июль 30, 2014, 11:34 Как появится под рукой - попробую!
Всем спасибо! |