QT——文件操作类 QFile和QTextStream
QFile类
QFile是Qt框架中用于文件I/O操作的类,继承自QIODevice,提供了文件读写的基本功能。
主要功能
文件读写:支持文本和二进制文件的读写操作
文件信息:可以获取文件大小、修改日期等信息
文件操作:支持重命名、移动、删除等操作
错误处理:提供错误检测和处理机制
常用方法
方法 | 描述 | 示例 |
---|---|---|
open() | 打开文件,需指定模式 | file.open(QIODevice::ReadOnly) |
close() | 关闭文件 | file.close() |
read() | 读取文件内容 | file.read(100) |
write() | 写入文件内容 | file.write("data") |
exists() | 检查文件是否存在 | file.exists() |
remove() | 删除文件 | file.remove() |
copy() | 复制文件 | file.copy("newfile.txt") |
基本用法
(1) 打开文件
#include <QFile>
#include <QDebug>void readFile() {QFile file("example.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 以只读文本模式打开qDebug() << "无法打开文件!";return;}// 读取文件内容(后续用 QTextStream 处理)// ...file.close(); // 关闭文件
}
- 打开模式:
QIODevice::ReadOnly
:只读模式。QIODevice::WriteOnly
:只写模式(会清空原有内容)。QIODevice::Append
:追加模式(在文件末尾写入)。QIODevice::Text
:文本模式(自动处理换行符)。
(2) 读取文件内容(直接读取)
QFile file("example.txt");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {while (!file.atEnd()) {QByteArray line = file.readLine(); // 逐行读取qDebug() << line;}file.close();
}
readLine()
:读取一行文本(返回QByteArray
)。readAll()
:一次性读取整个文件内容。
(3) 写入文件
QFile file("output.txt");
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {file.write("Hello, Qt File!\n"); // 写入字符串file.write("另一行文本\n");file.close();
}
QTextStream类
QTextStream提供了方便的文本读写功能,可以处理不同编码的文本文件。
主要特性
特性 | 描述 |
---|---|
字符编码 | 支持UTF-8、UTF-16等多种编码 |
格式化 | 提供数字精度、基数等格式化功能 |
流操作 | 支持<<和>>操作符 |
换行处理 | 自动处理不同操作系统的换行符 |
缓冲机制 | 提高读写效率 |
常用方法
方法 | 描述 | 示例 |
---|---|---|
setCodec() | 设置字符编码 | stream.setCodec("UTF-8") |
readLine() | 读取一行文本 | stream.readLine() |
readAll() | 读取全部内容 | stream.readAll() |
<< 操作符 | 写入数据 | stream << "Text" << 123 |
>> 操作符 | 读取数据 | stream >> str >> num |
基本用法
(1) 读取文本文件
#include <QTextStream>
#include <QFile>
#include <QDebug>void readWithTextStream() {QFile file("example.txt");if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {qDebug() << "无法打开文件!";return;}QTextStream in(&file); // 绑定 QFile 对象while (!in.atEnd()) {QString line = in.readLine(); // 逐行读取qDebug() << line;}file.close();
}
QTextStream
优势:- 自动处理文本编码(如 UTF-8)。
- 支持格式化输入输出(类似 C++ 的
iostream
)。
(2) 写入文本文件
void writeWithTextStream() {QFile file("output.txt");if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {QTextStream out(&file); // 绑定 QFile 对象out << "Hello, Qt TextStream!\n"; // 格式化输出out << "数字: " << 42 << "\n";out << "浮点数: " << 3.14 << "\n";file.close();}
}
<<
运算符:支持多种数据类型(QString
、int
、double
等)。
(3) 设置编码和格式
QTextStream out(&file);
out.setEncoding(QStringConverter::Utf8); // 设置编码为 UTF-8
out.setFieldAlignment(QTextStream::AlignLeft); // 左对齐
out.setNumberFlags(QTextStream::ShowBase); // 显示数字进制(如 0x1A)
总结
类名 | 用途 | 特点 |
---|---|---|
QFile | 文件读写 | 支持二进制和文本模式,直接操作文件。 |
QTextStream | 文本流处理 | 格式化输入输出,自动处理编码和换行符。 |
适用场景
QFile
:适合直接读写二进制数据或简单文本。QTextStream
:适合结构化文本处理(如 CSV、日志文件)。