通过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 >