У меня такая же ситуация с Qt 5.3.0 (хорошо, это все еще бета-версия, но я твердо верю, что та же ошибка воспроизводится в Qt5.2.x).
QNetworkAccessManager правильно сообщает об ошибке fileNotFound для ftp, но никогда не восстанавливается после нее. Любые последующие ftp-запросы завершаются с тем же сообщением об ошибке.
Предположим, попробуйте получить файл badFile.txt (которого не существует). Получаем правильное сообщение о том, что файл badFile.txt не найден. Если мы затем попытаемся получить доступ к файлу goodFile.txt (который уже существует), мы получим
Error while downloading ftp://ftp.url.com/goodFile.txt:
Downloading file failed:
Can't open /badFile.txt: No such file or directory"
Предыдущая ошибка, кажется, навсегда застряла в QNetworkAccessManager.
Единственное решение, которое сработало для меня, состояло в том, чтобы удалять и создавать новый QNetworkAccessManager каждый раз, когда возникает ошибка ftp not found. Это делается простым подключением к сигналу ошибки QNetworkReply(QNetworkReply::NetworkError). Как заявил elmigranto, готовый сигнал будет выдаваться для каждого активного запроса. Очевидно, что это может работать только в том случае, если QNetworkAccessManager обрабатывает один запрос, в противном случае необходимо соблюдать особую осторожность, чтобы не прерывать любые параллельные запросы, обрабатываемые одним и тем же менеджером.
Сигналы QNetworkAccessManager finish(QNetworkReply*) и QNetworkReply finish() делают одно и то же. Как указано в документах Qt, эти два сигнала испускаются в тандеме. Это НЕ решение этой проблемы, как заявил Бастер.
Установка таймера может быть полезна для других целей (например, для тайм-аута соединения), но не решит и эту конкретную проблему.
person
Konstantinos Gaitanis
schedule
07.05.2014
delete
QNAM и создать новый (обратите внимание, что будет выданоQNetworkReply::fininshed
). Кроме того, не забывайтеreply->deleteLater()
в своемNetworkHandler::finished()
. Что происходит, когда вы пытаетесь загрузить недопустимый файл с помощью браузера? (Если проблема решена, примите ответ Бастера.) - person Aleksei Zabrodskii   schedule 08.08.2012