文件管理 · 2022年9月8日

qdatastream读文件|qt文件读取

① 请教如何用 QDataStream 读取bin文件

你把代码贴全好不好啊,这是声明的QDataStream的对象,代码自己声明的,并不是预定义的。它是一个流对象,你可以查看QDataStream的文档,继承自QIODevice,QDataStreamout(&block,QIODevice::WriteOnly);这一句声明了out是一个QDataStream对象,将声明QByteArray的实例block最为存储缓冲区,模式为只写。同样你去看代码in是一个只读流,将socket中的数据读出来的功能。in>>的意思是读出到blocksize中。和iostream很像,out和in都和网络模块没任何关系。

② QTextStream和QDataStream的区别

QTextStream和QDataStream都是面向数据流的,都适用于QIODevice,但是他们的侧重点不同。可以这么说,QTextStream能做的事情QDataStream都能做。QTextStream 侧重于向QIODevice文本读写,这里所说的文本指的是普通的简单的QChar,QString,QLatin1Char,int等等之内的,和C语言中写文件或者网络传输的时候,先将内容填充到一个buffer,进行操作有点类似,属于普通的轻量级的流操作类。view plain to clipboardprint?1. //下面代码就是写文件操作2. QFile data("output.txt");3. if (data.open(QFile::WriteOnly | QFile::Truncate)) {4. QTextStream out(&data);5. out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7;6. // writes "Result: 3.14 2.7 "7. } //下面代码就是写文件操作 QFile data("output.txt"); if (data.open(QFile::WriteOnly | QFile::Truncate)) { QTextStream out(&data); out << "Result: " << qSetFieldWidth(10) << left << 3.14 << 2.7; // writes "Result: 3.14 2.7 " }QDataStream则是侧重于数据格式和类型。QDataStream数据流不仅可以操作QTextStream所能处理的普通文本,而且可以对特定格式的类型数据进行完美的输入与输出。熟悉Linux C开发的程序员应该知道,通过socket传输text文本数据比较容易,如果我们想通过socket传输特定的数据节结构而且跨平台以及CUP进行操作和解析就比较麻烦。比如对于一个点的坐标,要么传输一个结构体,让接收端进行解析,但是可能对于不同的平台以及不同的内存分配方式的CPU来说,解析的结果不一定是我们预期的,可是实现,但是会比较麻烦。QDataSream就可以轻松的做到这一点,QDataSream将数据序列化。不仅可以读写text,而且还好可以读写一个特定是数据类型,比如QPoint, QFont,几乎Qt支持的所有类型都可以使用QDataSream进行操作。就拿读写QPoint为例:view plain to clipboardprint?1. QPoint pos(8, 6)2. QPoint tmp;3. QByteArray datagram;4. QDataStream out(&datagram, QIODevice::WriteOnly);5. out.setVersion(QDataStream::Qt_4_3);6. out << pos();//此时,datagram里面的内容就是一个QPoint。7.8. out >> tmp//此时tmp的坐标就是tmp(8, 6); QPoint pos(8, 6) QPoint tmp; QByteArray datagram; QDataStream out(&datagram, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_3); out << pos();//此时,datagram里面的内容就是一个QPoint。 out >> tmp//此时tmp的坐标就是tmp(8, 6);QDataStream是根据类型以及输出输入顺序来决定输出数据。列举下面的例子来说明问题view plain to clipboardprint?1. QFile file("file.dat");2. file.open(QIODevice::WriteOnly);3. QDataStream out(&file); // we will serialize the data into the file4. out << QString("the answer is"); // serialize a string5. out << (qint32)42; // serialize an integer6.7.8. Example (read binary data from a stream):9.10.11. QFile file("file.dat");12. file.open(QIODevice::ReadOnly);13. QDataStream in(&file); // read the data serialized from the file14. QString str;15. qint32 a;16. in >> str >> a; // extract "the answer is" and 42

③ Qt中readall返回二进制数据么

返回的。Qt使用QFile和QDataStream进行二进制数据文件的读写,QFile负责文件的IO设备接口,即与文件的物理交互。QDataStream以数据流的方式读取文件内容或写入文件内容。QtCreator是一个用于Qt开发的轻量级跨平台集成开发环境。QtCreator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境(IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。即使不开发Qt应用程序,QtCreator也是一个简单易用且功能强大的IDE。

④ 请教如何用QDataStream读取bin文件

这是声明的QDataStream的对象,代码自己声明的,并不是预定义的。它是一个流对象,你可以查看QDataStream的文档,继承自QIODevice,QDataStreamout(&block,QIODevice::WriteOnly);这一句声明了out是一个QDataStream对象,将声明QByteArray的实例block最为存储缓冲区,模式为只写。同样你去看代码in是一个只读流,将socket中的数据读出来的功能。in>>的意思是读出到blocksize中。和iostream很像,out和in都和网络模块没任何关系。

⑤ 怎么用 QDataStream 读取bin文件

文件操作还是直接用C++的ifstream来读取,比较qt的简单得多。 file.open("test.bin",ios::binary|ios::ate); int size=file.tellg(); //通过标志ate得到文件大小。 char* buf=new char[size]; file.seekg(0,ios::beg); //把读取位置重新写入文件开头。 file.read(buf,size); file.close();

⑥ Qt怎么把QTableWidget表格中的数据读取出来

1、使用QDataStream进行二进制数据读写。

⑦ QT中关于Qdatastream使用问题 socket 读数据同时写入file内

<script type="text/javascript"> Leaf leaf = new Leaf("Leaf D"); root.Add(leaf); root.Remove(leaf); root.Display(1); Console.Read(); }

⑧ 如何将qimage读入到qdatastream

我看你是想读取一个文本文件吧 data stream是给二进制数据流使用的啊 并且它的读写并不是我们常规意义上能够直接看懂的那些文字 你是需要text stream吧

⑨ qdatastream怎么读写文件乱码

文件操作还是直接用C++的ifstream来读取,比较qt的简单得多。

⑩ qt文件读取

1、Qt 作为一个通用开发库,提供了跨平台的文件操作能力。文件操作是应用程序必不可少的部分。2、Qt5增加了QFileDevice类。途中所涉及的类及其用途简要说明如下:· QFlie:访问本地文件或者嵌入资源;· QTemporaryFile:创建和访问本地文件系统的临时文件;· QBuffer:读写QByteArray;· QProcess:运行外部程序,处理进程间通讯;· QTcpSocket:TCP协议网络数据传输;· QUdpSocket:传输 UDP 报文;· QSslSocket:使用 SSL/TLS 传输数据;· QFileDevice:新增加的类,提供了有关文件操作的通用实现。3、这其中,QProcess、QTcpSocket、QUdpSoctet和QSslSocket是顺序访问设备。所谓“顺序访问”,是指它们的数据只能访问一遍:从头走到尾,从第一个字节开始访问,直到最后一个字节,中途不能返回去读取上一个字节;QFile、QTemporaryFile和QBuffer是随机访问设备,可以访问任意位置任意次数,还可以使用QIODevice::seek()函数来重新定位文件访问位置指针。4、QFile主要提供了有关文件的各种操作,比如打开文件、关闭文件、刷新文件等。我们可以使用QDataStream或QTextStream类来读写文件,也可以使用QIODevice提供的read()、readLine()、readAll()以及write()这样的函数。值得注意的是,有关文件本身的信息,比如文件名、文件所在目录的名字等,则是通过QFileInfo获取,而不是自己分析文件路径字符串。5、举个例子,打开文件时,需要参数指定打开文件的模式:Constant Value Description QIODevice::NotOpen 0x0000 The device is not open. QIODevice::ReadOnly 0x0001 The device is open for reading. QIODevice::WriteOnly 0x0002 The device is open for writing. QIODevice::ReadWrite ReadOnly | WriteOnly The device is open for reading and writing. QIODevice::Append 0x0004 The device is opened in append mode, so that all data is written to the end of the file. QIODevice::Truncate 0x0008 If possible, the device is truncated before it is opened. All earlier contents of the device are lost. QIODevice::Text 0x0010 When reading, the end-of-line terminators are translated to '\n'. When writing, the end-of-line terminators are translated to the local encoding, for example '\r\n' for Win32.QIODevice::Unbuffered 0x0020 Any buffer in the device is bypassed.