Russian Qt Forum
Март 29, 2024, 10:46
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
[РЕШЕНО] QFile FileError
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: [РЕШЕНО] QFile FileError (Прочитано 9134 раз)
OKTA
Гость
[РЕШЕНО] QFile FileError
«
:
Июль 30, 2014, 10:10 »
Товарищи, пытаюсь вероломно удалить файл, но remove() возвращает false, а error() NoError, errorString() - Unknown error. Разве это человечно? Где справедливость?
«
Последнее редактирование: Июль 30, 2014, 11:34 от OKTA
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: QFile FileError
«
Ответ #1 :
Июль 30, 2014, 10:12 »
1. Покажи кот.
2. ОС?
3. Удаляется другими средствами?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
Re: QFile FileError
«
Ответ #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
Сообщений: 5876
Жаждущий знаний
Re: QFile FileError
«
Ответ #3 :
Июль 30, 2014, 10:18 »
Эм. А где удаление через QFile? Если в эксплорере удалить? Если удалить через статический метод QFile::remove?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
Re: QFile FileError
«
Ответ #4 :
Июль 30, 2014, 10:22 »
Кажется нашел проблему. Все проще - права..
Выдает QFlags(0x4|0x40|0x400|0x4000) - вроде как только чтение разрешено как раз.
Записан
OKTA
Гость
Re: QFile FileError
«
Ответ #5 :
Июль 30, 2014, 10:23 »
GetLastError - 0
Записан
OKTA
Гость
Re: QFile FileError
«
Ответ #6 :
Июль 30, 2014, 10:27 »
Выставил перед удалением file.setPermissions(QFile::WriteOther); и удалился как надо!
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: QFile FileError
«
Ответ #7 :
Июль 30, 2014, 10:27 »
Цитата: OKTA от Июль 30, 2014, 10:22
Кажется нашел проблему. Все проще - права..
Выдает QFlags(0x4|0x40|0x400|0x4000) - вроде как только чтение разрешено как раз.
Права файла не имеют никакого отношения к возможности его удалить. За удаление отвечают права каталога, в котором находится файл.
Из эксплорера удалить можно его?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: QFile FileError
«
Ответ #8 :
Июль 30, 2014, 10:29 »
Цитата: OKTA от Июль 30, 2014, 10:27
Выставил перед удалением file.setPermissions(QFile::WriteOther); и удалился как надо!
Возможно, это косвенно помогло. Попробуй не создавать объекта:
Код
C++ (Qt)
QFile
::
remove
(
"D:/test/test.dll"
)
;
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
Re: QFile FileError
«
Ответ #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
Сообщений: 5876
Жаждущий знаний
Re: QFile FileError
«
Ответ #10 :
Июль 30, 2014, 10:45 »
Ты правильно перевел?
"Если пользователь имеет полный доступ к каталогу, пользователь может удалить файл независимо от прав доступа к файлу".
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: QFile FileError
«
Ответ #11 :
Июль 30, 2014, 10:46 »
Версия Кьюта какая?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
OKTA
Гость
Re: QFile FileError
«
Ответ #12 :
Июль 30, 2014, 10:53 »
Ой точно, невнимательность..
Ну тогда это точно причина не в правах к папке, т.к. другой созданный в этой папке файл удаляется нормально, а во вкладке "безопасность" права у всех файлов одинаковые
Ничего не понимаю
Qt - 4.7.4
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: QFile FileError
«
Ответ #13 :
Июль 30, 2014, 10:55 »
Как вариант - кто-то держит этот файл. По логике, файл может быть открыт где-то еще в проге?
Может еще антивирь мешать.
Поискал на багктрекере, ничего такого не нашел.
«
Последнее редактирование: Июль 30, 2014, 10:58 от Пантер
»
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Alex Custov
Джедай : наставник для всех
Offline
Сообщений: 2063
Re: QFile FileError
«
Ответ #14 :
Июль 30, 2014, 11:08 »
Цитата: Пантер от Июль 30, 2014, 10:27
Цитата: OKTA от Июль 30, 2014, 10:22
Кажется нашел проблему. Все проще - права..
Выдает 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
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...