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 и читает файл, но он получает мусор, что я делаю не так ??
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()
в самом конце.
Других решений пока нет …