QT——文件操作类 QFile和QTextStream

发布于:2025-07-18 ⋅ 阅读:(13) ⋅ 点赞:(0)

QFile类

QFile是Qt框架中用于文件I/O操作的类,继承自QIODevice,提供了文件读写的基本功能。

主要功能

  1. 文件读写:支持文本和二进制文件的读写操作

  2. 文件信息:可以获取文件大小、修改日期等信息

  3. 文件操作:支持重命名、移动、删除等操作

  4. 错误处理:提供错误检测和处理机制

常用方法

方法 描述 示例
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();
    }
}
  • << 运算符:支持多种数据类型(QStringintdouble 等)。
(3) 设置编码和格式
QTextStream out(&file);
out.setEncoding(QStringConverter::Utf8); // 设置编码为 UTF-8
out.setFieldAlignment(QTextStream::AlignLeft); // 左对齐
out.setNumberFlags(QTextStream::ShowBase); // 显示数字进制(如 0x1A)

总结

类名 用途 特点
QFile 文件读写 支持二进制和文本模式,直接操作文件。
QTextStream 文本流处理 格式化输入输出,自动处理编码和换行符。

适用场景

  • QFile:适合直接读写二进制数据或简单文本。
  • QTextStream:适合结构化文本处理(如 CSV、日志文件)。

网站公告

今日签到

点亮在社区的每一天
去签到