通过QDataStream和QTcpSocket读取和发送文件

通过QDataStream和QTcpSocket读取和发送文件,qt,qtcpsocket,qfile,Qt,Qtcpsocket,Qfile,我的问题是变量内容总是空的。 这是我的密码: QFile file("/home/qt/Client/file.txt"); if(file.open(QIODevice::ReadOnly)){ qDebug("File opened"); } QDataStream fileData(&file); QByteArray content; QDataStream out(&content, QIODevice::WriteOnly); out.setVersion

我的问题是变量内容总是空的。 这是我的密码:

QFile file("/home/qt/Client/file.txt");
if(file.open(QIODevice::ReadOnly)){
    qDebug("File opened");
}

QDataStream fileData(&file);

QByteArray content;
QDataStream out(&content, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_7);  

out << static_cast<quint16>(0) << "file" << "/home/qt/Client/file.txt" << fileData;

out.device()->seek(0);
out << static_cast<quint16>(content.size());

qDebug() << content.constData();

tcpSocket->write(content);
内容总是空的


感谢您的帮助

内容
不是空的,但如果您将其解释为以C样式0结尾的字符串,它将显示为空

当你写作时:

out.device()->seek(0);
out << static_cast<quint16>(content.size());
运行时输出(文件仅包含20个字符):

如果我用过:

std::cout << content.constData();

内容
不是空的,但如果将其解释为以0结尾的C样式字符串,则它将显示为空

当你写作时:

out.device()->seek(0);
out << static_cast<quint16>(content.size());
运行时输出(文件仅包含20个字符):

如果我用过:

std::cout << content.constData();
或者您可以“简单地”输出“content.toPercentEncoding()”而不是“content.constData()”来转义特殊字符,包括
\0
。或者您可以“简单地”输出“content.toPercentEncoding()”而不是“content.constData()”来转义特殊字符,包括
\0
std::cout << content.constData();
00000000  00 40 00 00 00 05 66 69  6c 65 00 00 00 00 19 2f  |.@....file...../|
          <u16> < str len > <  str data   > < str len > <
00000010  68 6f 6d 65 2f 71 74 2f  43 6c 69 65 6e 74 2f 66  |home/qt/Client/f|
                               str data...
00000020  69 6c 65 2e 74 78 74 00  00 00 00 14 61 61 61 61  |ile.txt.....aaaa|
            str data            >  <data len > < 
00000030  61 61 61 61 61 61 61 61  61 61 61 61 61 61 61 61  |aaaaaaaaaaaaaaaa|
                    data                                 >