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 回答