我需要通過Qt5寫一個簡單的FTP客戶端上傳功能,從win7上傳到嵌入式Linux中,上傳交叉編譯出來的可執行二進制檔案。出現的問題是:上傳成功了,但是檔案大小發生了變化。
上傳之后,通過FIlezilla FTP再下載到win7中,通過beyond compare進行比對,發現多了好多0x0D,我認為可能是在傳輸的程序中在每一行的最后添加了換行(0x0D)。
因為Qt5不在使用QFtp,所以我使用QNetworkAccessManager,進行上傳,出現了上述問題;然后又下載QFtp原始碼編譯出動態庫使用,再上傳,還是上述問題。
請問大家,有沒有人知道這個問題怎么決絕?
謝謝。
以下是使用QNetworkAccessManager的代碼
QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
accessManager->setNetworkAccessible(QNetworkAccessManager::Accessible);
QUrl url("ftp://" + m_devIp + RemoteFileName);
url.setUserName("root");
url.setPassword("123456");
url.setPort(21);
m_file = new QFile(LocalFileName);
if (m_file->open(QIODevice::ReadOnly)) {
QByteArray byteArray = m_file->readAll ();
m_reply = accessManager->put(QNetworkRequest(url), byteArray);
}
connect(accessManager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(ftpReplyFinished(QNetworkReply*)));
connect(m_reply, SIGNAL(uploadProgress(qint64 ,qint64)),
this, SLOT(ftp_loadProgress(qint64 ,qint64)));[/size]
以下使用用QFtp的代碼
m_ftp = new QFtp();
m_ftp->connectToHost (m_devIp, 21);
m_ftp->login ("root", runPara.ftpPasswd);
m_file = new QFile(LocalFileName);
if (m_file->open(QIODevice::ReadOnly)) {
m_ftp->put (m_file, RemoteFileName, QFtp::Binary);
connect(m_ftp, SIGNAL(dataTransferProgress(qint64,qint64)),
this, SLOT(ftp_loadProgress(qint64,qint64)));
connect(m_ftp, SIGNAL(commandFinished(int,bool)),
this, SLOT(qftp_CommandFinished(int,bool)));
}
檔案對比如下

其中左邊是正常的檔案,右邊是上傳之后,又下載下來的檔案
uj5u.com熱心網友回復:
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/148470.html
標籤:Qt
