Russian Qt Forum
Март 29, 2024, 10:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QFile FileError  (Прочитано 9134 раз)
OKTA
Гость
« : Июль 30, 2014, 10:10 »

Товарищи, пытаюсь вероломно удалить файл, но remove() возвращает false, а error() NoError, errorString() - Unknown error. Разве это человечно? Где справедливость?  Смеющийся
« Последнее редактирование: Июль 30, 2014, 11:34 от OKTA » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июль 30, 2014, 10:12 »

1. Покажи кот.
2. ОС?
3. Удаляется другими средствами?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #2 : Июль 30, 2014, 10:17 »

Удаляю без всяких хитростей. Ос - Win7. DeleteFileA так же ноль эмоций.

Вот весь код:
Код:
QFile file("D:/test/test.dll");
file.remove();
DeleteFileA("D:/test/test.dll");

Только сейчас попробовал - текстовые файлы удаляет норм  Шокированный

Забыл скопипастить remove, пардон)
« Последнее редактирование: Июль 30, 2014, 10:19 от OKTA » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Июль 30, 2014, 10:18 »

Эм. А где удаление через QFile? Если в эксплорере удалить? Если удалить через статический метод QFile::remove?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #4 : Июль 30, 2014, 10:22 »

Кажется нашел проблему. Все проще - права..
Выдает QFlags(0x4|0x40|0x400|0x4000) - вроде как только чтение разрешено как раз.
Записан
OKTA
Гость
« Ответ #5 : Июль 30, 2014, 10:23 »

GetLastError - 0  Злой
Записан
OKTA
Гость
« Ответ #6 : Июль 30, 2014, 10:27 »

Выставил перед удалением file.setPermissions(QFile::WriteOther); и удалился как надо!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Июль 30, 2014, 10:27 »

Кажется нашел проблему. Все проще - права..
Выдает QFlags(0x4|0x40|0x400|0x4000) - вроде как только чтение разрешено как раз.
Права файла не имеют никакого отношения к возможности его удалить. За удаление отвечают права каталога, в котором находится файл.
Из эксплорера удалить можно его?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Июль 30, 2014, 10:29 »

Выставил перед удалением file.setPermissions(QFile::WriteOther); и удалился как надо!
Возможно, это косвенно помогло. Попробуй не создавать объекта:
Код
C++ (Qt)
QFile::remove ("D:/test/test.dll");
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #9 : Июль 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  Непонимающий
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Июль 30, 2014, 10:45 »

Ты правильно перевел?
"Если пользователь имеет полный доступ к каталогу, пользователь может удалить файл независимо от прав доступа к файлу".
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Июль 30, 2014, 10:46 »

Версия Кьюта какая?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
« Ответ #12 : Июль 30, 2014, 10:53 »

Ой точно, невнимательность..
Ну тогда это точно причина не в правах к папке, т.к. другой созданный в этой папке файл удаляется нормально, а во вкладке "безопасность" права у всех файлов одинаковые  Непонимающий Ничего не понимаю  Непонимающий
Qt - 4.7.4
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Июль 30, 2014, 10:55 »

Как вариант - кто-то держит этот файл. По логике, файл может быть открыт где-то еще в проге?
Может еще антивирь мешать.
Поискал на багктрекере, ничего такого не нашел.
« Последнее редактирование: Июль 30, 2014, 10:58 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #14 : Июль 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"
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 22.