Russian Qt Forum
Ноябрь 24, 2024, 10:20
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Как получить код ошибки?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как получить код ошибки? (Прочитано 6723 раз)
AVDEY
Гость
Как получить код ошибки?
«
:
Март 04, 2012, 18:30 »
Начал разбираться с Qt, и не обнаружил аналога функции GetLastError();
Например при работе с файлом.
Функция bool QFile::open(...); возвращает фалсе
я нашел что могу получить QFile::error(); - которая возвращает 15 вариантов ошибки
QFile::errorString(); -возвращает текстовою информацию об ошибке
Так вот функция error() возвращает OpenError = 5
а errorString(); может вернуть: файл не найден, процесс не может получить доступ к файлу. и т. д.
Как получить код ошибки?
С практики программирования на MVC++6.0 функция GetLastError(); использовалась часто, так как получив код ошибки можно предпринять какие то действия без участия пользователя, и это касается не только QFile.
Записан
kuzulis
Джедай : наставник для всех
Offline
Сообщений: 2812
Re: Как получить код ошибки?
«
Ответ #1 :
Март 04, 2012, 18:55 »
Я не распарсил
Записан
ArchLinux x86_64 / Win10 64 bit
Странник
Гость
Re: Как получить код ошибки?
«
Ответ #2 :
Март 04, 2012, 19:04 »
в данном случае при OpenError наличие файла вы можете проверить с помощью exists.
Записан
AVDEY
Гость
Re: Как получить код ошибки?
«
Ответ #3 :
Март 04, 2012, 19:38 »
Цитата: Странник от Март 04, 2012, 19:04
в данном случае при OpenError наличие файла вы можете проверить с помощью exists.
А если файл занят другим процессом с монопольным доступом?
Я просто к тому что программа различает тип ошибки судя с вызова функции errorString(); как получить ее цифровой эквивалент как GetLastError();
Да не нужно привязываться к открытию файла, я просто привел пример. Ситуация когда нужно знать код ошибки и что то автоматом переделать а не просто вывести errorString(); возникает не только при работе с фалами.
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Как получить код ошибки?
«
Ответ #4 :
Март 04, 2012, 19:51 »
QFile::error() и возвращает код ошибки. Более детализированного нет. Можно конечно вызывать нативные функции системы (тот же GetLastError) но надо понимать, что в разных ОС коды ошибок будут зачастую не совпадать.
Записан
AVDEY
Гость
Re: Как получить код ошибки?
«
Ответ #5 :
Март 04, 2012, 20:06 »
Цитата: LisandreL от Март 04, 2012, 19:51
QFile::error() и возвращает код ошибки. Более детализированного нет. Можно конечно вызывать нативные функции системы (тот же GetLastError) но надо понимать, что в разных ОС коды ошибок будут зачастую не совпадать.
Просто QFile::error() возвращает очень обширно, типа не открыл, не прочитал, не записал, не переименовал и т. д.
а почему не знает, зато детально это знает функция QFile::errorString() но в текстовом виде, поэтому и есть мысль что должен быть цифровой эквивалент QFile::errorString().
Записан
Странник
Гость
Re: Как получить код ошибки?
«
Ответ #6 :
Март 04, 2012, 20:18 »
а если файл занят другим процессом, то file.exists() && (file.error() == QFile::OpenError). на отказ в доступе вроде бы отдельный код ошибки был. я это к тому, что мне всегда стандартных кодов хватало. а их малое число, подозреваю, обусловлено кросплатформенностью библиотеки. если в вашем случае и в самом деле недостаточно конкретно - используйте API целевых платформ.
«
Последнее редактирование: Март 04, 2012, 20:19 от Странник
»
Записан
AVDEY
Гость
Re: Как получить код ошибки?
«
Ответ #7 :
Март 04, 2012, 21:33 »
Цитата: Странник от Март 04, 2012, 20:18
я это к тому, что мне всегда стандартных кодов хватало.
К примеру делаем QFile::rename (перемещаем файл) error возвращает ошибку RenameError = 10,
и какие дальнейшие действия файл уже существует, исходный файл занят, недостаточно места на диске и. т. д.
Можно конечно проверить открывается ли файл, существует ли файл с заданным именем в директории назначения проверить свободное место на диске и размер файла, но как по мне уж очень много лишних действий надо делать тем болеее (опять повторюсь) QFile::errorString() различает ошибки. На одну ошибку error несколько стрингових объяснений. (файл не существует, не найден путь к файлу, файл занят другим процессом, файл назначения уже существует)
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Как получить код ошибки?
«
Ответ #8 :
Март 04, 2012, 22:55 »
Никогда не понимал "пост" обработки - сначала попытаться что-то сделать, а потом разбираться, что же именно не получилось. И не важно, разбираем ли мы код ошибки, коих миллион, или ловим эксепшн.
Если разбор ошибки не нужен, то булки в качестве возвращаемого значения достаточно.
Если разбор ошибки нужен, то нет никакой разницы - проверить до вызова действия существует ли файл, или отловить эксепшн "file exists". Тем более, что этих ошибок не так много (йа писал копир файлов, йа знаю).
Ну и хз, каких вам там ошибок не хватает у QFile'а - вроде невалидные параметры в него сложно передать, в отличие от винапи.
Записан
AVDEY
Гость
Re: Как получить код ошибки?
«
Ответ #9 :
Март 05, 2012, 10:27 »
Цитата: Авварон от Март 04, 2012, 22:55
... или отловить эксепшн "file exists". ...
я не очень еще силен в Qt - не понял что вы имели ввиду.
Предположим ситуацию: исходный файл существует и доступен для чтения, его требуется переместить, в директории назначения файл уже существует с таким же именем но он занят другим процессом file.exists() вернет QFile::OpenError то есть можно предположить что файла нет, а в то же время при перемещении получим ошибку.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Как получить код ошибки?
«
Ответ #10 :
Март 05, 2012, 10:47 »
Цитата: AVDEY от Март 05, 2012, 10:27
я не очень еще силен в Qt - не понял что вы имели ввиду.
Я в общем слцчаеговорил, не привязываясь к Qt.
Цитата: AVDEY от Март 05, 2012, 10:27
Предположим ситуацию: исходный файл существует и доступен для чтения, его требуется переместить, в директории назначения файл уже существует с таким же именем но он занят другим процессом file.exists() вернет QFile::OpenError то есть можно предположить что файла нет, а в то же время при перемещении получим ошибку.
Ну проверьте существование и права - если они нормальны, то скорее всего файл занят. И есть мнение что обработать ошибку открытия можно лишь 1м способом, независимо от того, чем эта ошибка вызвана - ничего не делать:)
Записан
Странник
Гость
Re: Как получить код ошибки?
«
Ответ #11 :
Март 05, 2012, 12:19 »
Цитата: Авварон от Март 05, 2012, 10:47
И есть мнение что обработать ошибку открытия можно лишь 1м способом, независимо от того, чем эта ошибка вызвана - ничего не делать:)
это в общем случае. но существуют и частные.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...