0

私のアプリケーションは、を介してサーバーにオブジェクトを送信しましたQTcpSocket

クライアント:

void client::sendFile(QString path)
{
    QFile toSend(path);
    QByteArray rawFile;
    rawFile = toSend.readAll();

    QDataStream out(cl);
    out >> rawFile;
}

サーバ:

void server::handleClient()
{
    QTcpSocket *curCl = srv->nextPendingConnection();
    QByteArray z;
    QDataStream in(curCl);
    in >> z;

    QFile qwe("test.dat");
    qwe.write(z);
    qwe.close();
}

問題は何も起こらないことですが、デバッグコンソールは私に言った:

QIODevice::write: device not open
QIODevice::read: device not open

...しかし、このQDataStreamオブジェクトではオープン モードを設定できません! :( どうしたの?

4

1 に答える 1

1

QFile+ QFile.write(またはQFile.read) が必要QFile.openです。例を参照してください:

書く:

QFile qwe("test.dat");
if(qwe.open(QIODevice::WriteOnly | QIODevice::Text)) {
  qwe.write(z);
  qwe.close();
} else {
  qDebug() << "Error";
}

また

#include <QTextStream>

...

QFile qwe("test.dat");
if(qwe.open(QIODevice::WriteOnly | QIODevice::Text)){
   QTextStream out(&qwe);
   out << "This file is generated by Qt\n";
   qwe.close();
} else {
  qDebug() << "Error";
}

読んだ:

QFile toSend(path);
if(toSend.open(QIODevice::ReadOnly | QIODevice::Text)) {//Open "read file"
    QByteArray rawFile;
    rawFile = toSend.readAll();

    QDataStream out(cl);
    out >> rawFile;
    toSend.close();//close
}
于 2014-06-06T16:43:45.650 に答える