QT QNetworkAccessManager для загрузки файла с FTP-сервера не работает

    QNetworkAccessManager *nam = new QNetworkAccessManager();
QUrl url2("ftp://127.0.0.1/test.txt/");
url2.setPassword("12345");
url2.setUserName("user");
QNetworkRequest req(url2);QNetworkReply *reply = nam->get(req);
QByteArray data = reply->readAll() ;
qDebug() << data ;

Он подключается к локальному серверу FTP и читает файл, но он получает мусор, что я делаю не так ??

3

Решение

get () не выполняет GET-запрос сразу же синхронно, а просто создает QNetworkReply объект, где фактический запрос будет выполнен асинхронно на более позднем этапе.

readAll() читает только данные, доступные в данное время, но не блокирует ожидание большего количества данных. Сразу после создания нет доступных данных.

Чтобы дождаться загрузки всех данных, подключитесь к законченный() а также ошибка() сигналы:

connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(requestError(QNetworkReply::NetworkError));

в requestFinished() слот вы можете использовать readAll(), Это работает нормально только при загрузке небольших файлов. При загрузке больших файлов лучше подключиться к readyRead () сигнализировать и обрабатывать поступающие данные в инкрементальных порциях вместо использования одного readAll() в самом конце.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]