2017-01-13 4 views
1

QNetworkAccessManagerを使用してファイルを転送しています。私のプログラムはDebugでビルドされても問題なく実行されます。 QIODevice :: read(QFile、 "my file path"):デバイスが開かない「QIODeviceデバイスがオープンしていません」リリースでビルドするときにのみ発生

私のコードで何が間違っていますか? あなたのお手伝いをありがとう!

QHttpMultiPart* getPacket(QString imgPath) 
{ 
    QHttpMultiPart *pMultiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType); 

    QFile *imgFile = new QFile(imgPath); 
    imgFile->setParent(pMultiPart); 
    Q_ASSERT(imgFile->open(QIODevice::ReadWrite)); 

    QHttpPart imagePart; 
    imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg")); 
    imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"img\"; filename=\"target.jpg\"")); 
    imagePart.setBodyDevice(imgFile); 
    pMultiPart->append(imagePart); 

    return pMultiPart; 
} 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    JTest testObj; 
    QNetworkAccessManager manager; 

    QHttpMultiPart *pHMP = getPacket("F:/Temp/1.jpg"); 
    QNetworkReply *pNR = manager.put(QNetworkRequest(QUrl("http://192.168.11.102:8080/Test")), pHMP); 
    QObject::connect(pNR, SIGNAL(finished()), &testObj, SLOT(handleTransmissionFinished())); 

    return a.exec(); 
} 

答えて

5

Q_ASSERTは() 開発時前後の条件をテストするのに有用です。 コンパイル中にQT_NO_DEBUGが定義されている場合は何も実行されません。

Q_ASSERTはリリースで評価されないため、ファイルは開かれません。

関連する問題