33 QT - 文本文件读写

简介: 33 QT - 文本文件读写

上一节我们介绍了有关二进制文件的读写。二进制文件比较小巧,却不是人可读的格式。而文本文件是一种人可读的文件。为了操作这种文件,我们需要使用QTextStream类。QTextStream和QDataStream的使用类似,只不过它是操作纯文本文件的。

QTextStream会自动将 Unicode 编码同操作系统的编码进行转换,这一操作对开发人员是透明的。它也会将换行符进行转换,同样不需要自己处理。QTextStream使用 16 位的QChar作为基础的数据存储单位,同样,它也支持 C++ 标准类型,如 int 等。实际上,这是将这种标准类型与字符串进行了相互转换。

QTextStream同QDataStream的使用基本一致,例如下面的代码将把“The answer is 42”写入到 file.txt 文件中:

QFile data("file.txt");
if (data.open(QFile::WriteOnly | QIODevice::Truncate)) 
{
    QTextStream out(&data);
    out << "The answer is " << 42;
}

这里,我们在open()函数中增加了QIODevice::Truncate打开方式。我们可以从下表中看到这些打开方式的区别:

枚举值 描述
QIODevice::NotOpen 未打开
QIODevice::ReadOnly 以只读方式打开
QIODevice::WriteOnly 以只写方式打开
QIODevice::ReadWrite 以读写方式打开
QIODevice::Append 以追加的方式打开
QIODevice::Truncate 以重写的方式打开,在写入新的数据时会将原有数据全部清除,游标设置在文件开头。
QIODevice::Text 在读取时,将行结束符转换成 \n;在写入时,将行结束符转换成本地格式,例如Win32 平台上是 \r\n
QIODevice::Unbuffered 忽略缓存

我们在这里使用了QFile::WriteOnly | QIODevice::Truncate,也就是以只写并且覆盖已有内容的形式操作文件。注意,QIODevice::Truncate会直接将文件内容清空。

虽然QTextStream的写入内容与QDataStream一致,但是读取时却会有些困难:

QFile data("file.txt");
if (data.open(QFile::ReadOnly)) 
{
    QTextStream in(&data);
    QString str;
    int ans = 0;
    in >> str >> ans;
}

在使用QDataStream的时候,这样的代码很方便,但是使用了QTextStream时却有所不同:读出的时候,str 里面将是 The answer is 42,ans 是 0。这是因为当使用QDataStream写入的时候,实际上会在要写入的内容前面,额外添加一个这段内容的长度值。而以文本形式写入数据,是没有数据之间的分隔的。因此,使用文本文件时,很少会将其分割开来读取,而是使用诸如使用:

QTextStream::readLine() 读取一行
QTextStream::readAll()读取所有文本

这种函数之后再对获得的QString对象进行处理。

默认情况下,QTextStream的编码格式是 Unicode,如果我们需要使用另外的编码,可以使用:

stream.setCodec("UTF-8");

这样的函数进行设置。

目录
相关文章
|
1月前
Qt 按行追加文本代码
Qt 按行追加文本代码
11 0
|
3月前
Qt6学习笔记十四(文件读写、文件信息读取)
Qt6学习笔记十四(文件读写、文件信息读取)
62 0
|
4月前
qt初入门1:qt读文件的几种方式简单整理
qt初入门1:qt读文件的几种方式简单整理
52 0
|
4月前
|
C++ 容器
[Qt5] QT+VS读取dwg文件
[Qt5] QT+VS读取dwg文件
73 0
|
4月前
|
C++ 计算机视觉
[Qt5] 各种方式的图像读取,支持中文路径(Halcon)
[Qt5] 各种方式的图像读取,支持中文路径(Halcon)
37 0
[Qt5] 各种方式的图像读取,支持中文路径(Halcon)
|
4月前
qt-读写文件QTextStream
qt-读写文件QTextStream
25 0
|
5月前
|
云计算 Windows
31 QT - 基本文件操作
31 QT - 基本文件操作
30 0
|
C++
C/C++ Qt 基本文件读写方法
Qt文件操作有两种方式,第一种使用QFile类的IODevice读写功能直接读写,第二种是利用 QFile和QTextStream结合起来,用流的方式进行文件读写。
379 0
|
存储 Python
Python基础 文本控制 文件编码格式 使用python读写文件 常用的文件打开方式
Python基础 文本控制 文件编码格式 使用python读写文件 常用的文件打开方式,文件对象的常用方法,文件读写的原理,读取磁盘文件中的内容
Python基础 文本控制 文件编码格式 使用python读写文件 常用的文件打开方式
thinkphp5 读取多行文本、读取文件分割多行文本
【代码】thinkphp5 读取多行文本、读取文件分割多行文本。

热门文章

最新文章