2017-01-13 15 views
1

QNetworkAccessManager를 사용하여 파일을 전송하고 있습니다. 내 프로그램은 디버그에서 빌드 될 때 아무런 문제없이 실행됩니다. 그러나 빌드 할 때 문제가있는 이상한 문제가 있습니다. QIODevice :: read (QFile, "내 파일 경로") : 장치가 열려 있지 않습니다."QIODevice device not open"은 릴리스시 빌드 할 때만 발생합니다.

내 코드가 잘못되었습니다. 도움 주셔서 감사합니다.

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는 릴리스에서 평가되지 않으므로 파일이 열리지 않습니다.