Название: Как получить код ошибки? Отправлено: AVDEY от Март 04, 2012, 18:30 Начал разбираться с Qt, и не обнаружил аналога функции GetLastError();
Например при работе с файлом. Функция bool QFile::open(...); возвращает фалсе я нашел что могу получить QFile::error(); - которая возвращает 15 вариантов ошибки QFile::errorString(); -возвращает текстовою информацию об ошибке Так вот функция error() возвращает OpenError = 5 а errorString(); может вернуть: файл не найден, процесс не может получить доступ к файлу. и т. д. Как получить код ошибки? С практики программирования на MVC++6.0 функция GetLastError(); использовалась часто, так как получив код ошибки можно предпринять какие то действия без участия пользователя, и это касается не только QFile. Название: Re: Как получить код ошибки? Отправлено: kuzulis от Март 04, 2012, 18:55 Я не распарсил
Название: Re: Как получить код ошибки? Отправлено: Странник от Март 04, 2012, 19:04 в данном случае при OpenError наличие файла вы можете проверить с помощью exists.
Название: Re: Как получить код ошибки? Отправлено: AVDEY от Март 04, 2012, 19:38 в данном случае при OpenError наличие файла вы можете проверить с помощью exists. А если файл занят другим процессом с монопольным доступом? Я просто к тому что программа различает тип ошибки судя с вызова функции errorString(); как получить ее цифровой эквивалент как GetLastError(); Да не нужно привязываться к открытию файла, я просто привел пример. Ситуация когда нужно знать код ошибки и что то автоматом переделать а не просто вывести errorString(); возникает не только при работе с фалами. Название: Re: Как получить код ошибки? Отправлено: LisandreL от Март 04, 2012, 19:51 QFile::error() и возвращает код ошибки. Более детализированного нет. Можно конечно вызывать нативные функции системы (тот же GetLastError) но надо понимать, что в разных ОС коды ошибок будут зачастую не совпадать.
Название: Re: Как получить код ошибки? Отправлено: AVDEY от Март 04, 2012, 20:06 QFile::error() и возвращает код ошибки. Более детализированного нет. Можно конечно вызывать нативные функции системы (тот же GetLastError) но надо понимать, что в разных ОС коды ошибок будут зачастую не совпадать. Просто QFile::error() возвращает очень обширно, типа не открыл, не прочитал, не записал, не переименовал и т. д. а почему не знает, зато детально это знает функция QFile::errorString() но в текстовом виде, поэтому и есть мысль что должен быть цифровой эквивалент QFile::errorString(). Название: Re: Как получить код ошибки? Отправлено: Странник от Март 04, 2012, 20:18 а если файл занят другим процессом, то file.exists() && (file.error() == QFile::OpenError). на отказ в доступе вроде бы отдельный код ошибки был. я это к тому, что мне всегда стандартных кодов хватало. а их малое число, подозреваю, обусловлено кросплатформенностью библиотеки. если в вашем случае и в самом деле недостаточно конкретно - используйте API целевых платформ.
Название: Re: Как получить код ошибки? Отправлено: AVDEY от Март 04, 2012, 21:33 я это к тому, что мне всегда стандартных кодов хватало. К примеру делаем QFile::rename (перемещаем файл) error возвращает ошибку RenameError = 10,и какие дальнейшие действия файл уже существует, исходный файл занят, недостаточно места на диске и. т. д. Можно конечно проверить открывается ли файл, существует ли файл с заданным именем в директории назначения проверить свободное место на диске и размер файла, но как по мне уж очень много лишних действий надо делать тем болеее (опять повторюсь) QFile::errorString() различает ошибки. На одну ошибку error несколько стрингових объяснений. (файл не существует, не найден путь к файлу, файл занят другим процессом, файл назначения уже существует) Название: Re: Как получить код ошибки? Отправлено: Авварон от Март 04, 2012, 22:55 Никогда не понимал "пост" обработки - сначала попытаться что-то сделать, а потом разбираться, что же именно не получилось. И не важно, разбираем ли мы код ошибки, коих миллион, или ловим эксепшн.
Если разбор ошибки не нужен, то булки в качестве возвращаемого значения достаточно. Если разбор ошибки нужен, то нет никакой разницы - проверить до вызова действия существует ли файл, или отловить эксепшн "file exists". Тем более, что этих ошибок не так много (йа писал копир файлов, йа знаю). Ну и хз, каких вам там ошибок не хватает у QFile'а - вроде невалидные параметры в него сложно передать, в отличие от винапи. Название: Re: Как получить код ошибки? Отправлено: AVDEY от Март 05, 2012, 10:27 ... или отловить эксепшн "file exists". ... я не очень еще силен в Qt - не понял что вы имели ввиду. Предположим ситуацию: исходный файл существует и доступен для чтения, его требуется переместить, в директории назначения файл уже существует с таким же именем но он занят другим процессом file.exists() вернет QFile::OpenError то есть можно предположить что файла нет, а в то же время при перемещении получим ошибку. Название: Re: Как получить код ошибки? Отправлено: Авварон от Март 05, 2012, 10:47 я не очень еще силен в Qt - не понял что вы имели ввиду. Я в общем слцчаеговорил, не привязываясь к Qt.Предположим ситуацию: исходный файл существует и доступен для чтения, его требуется переместить, в директории назначения файл уже существует с таким же именем но он занят другим процессом file.exists() вернет QFile::OpenError то есть можно предположить что файла нет, а в то же время при перемещении получим ошибку. Ну проверьте существование и права - если они нормальны, то скорее всего файл занят. И есть мнение что обработать ошибку открытия можно лишь 1м способом, независимо от того, чем эта ошибка вызвана - ничего не делать:)Название: Re: Как получить код ошибки? Отправлено: Странник от Март 05, 2012, 12:19 И есть мнение что обработать ошибку открытия можно лишь 1м способом, независимо от того, чем эта ошибка вызвана - ничего не делать:) это в общем случае. но существуют и частные. |