编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

  • Web开发和进阶

  • Linux应用开发

    • README
    • QML基础入门

    • QT核心库实践

      • README
      • 核心功能基础
      • 并发与多线程
      • 文件与IO系统
        • 3.1 文件与IO系统
          • 3.1.1 文件操作类
          • 3.1.2 数据流类
          • 3.1.3 资源系统
        • 3.2 文件读写
          • 3.2.1 QFile类读写
          • 3.2.2 QTextStream读写
          • 3.2.3 QDataStream读写
        • 3.3 目录管理
          • 3.3.1 QDir类
          • 3.3.2 QFileInfo类
        • 3.4 文件监控
          • 3.4.1 QFileSystemWatcher
        • 3.5 临时文件
          • 3.5.1 QTemporaryFile
      • 日期与时间处理
      • 网络与序列化
      • QT事件系统
      • 信号与槽机制
      • 多媒体的应用
      • 容器类和算法
      • 高级编程技巧
    • Linux实践开发

  • Apps
  • Linux应用开发
  • QT核心库实践
杨充
2025-08-15
目录

文件与IO系统

# 03.文件与IO系统

# 目录介绍

  • 3.1 文件与IO系统
    • 3.1.1 文件操作类
    • 3.1.2 数据流类
    • 3.1.3 资源系统
  • 3.2 文件读写
    • 3.2.1 QFile类读写
    • 3.2.2 QTextStream读写
    • 3.2.3 QDataStream读写
  • 3.3 目录管理
    • 3.3.1 QDir类
    • 3.3.2 QFileInfo类
  • 3.4 文件监控
    • 3.4.1 QFileSystemWatcher
  • 3.5 临时文件
    • 3.5.1 QTemporaryFile

# 3.1 文件与IO系统

功能:处理文件、目录、输入输出流。

核心类:

  • QFile、QDir:文件和目录操作。
  • QTextStream、QDataStream:文本和二进制流。
  • QIODevice:所有 I/O 设备的基类。
  • QFileInfo:用于获取文件信息。
  • QFileSystemWatcher:用于监控文件或目录的变化。
  • QTemporaryFile:用于创建临时文件。

# 3.1.1 文件操作类

  • QFile:文件读写
  • QDir:目录操作
  • QFileInfo:文件信息
  • QFileSystemWatcher:文件系统监控

# 3.1.2 数据流类

  • QDataStream:二进制数据序列化
  • QTextStream:文本数据流
  • QBuffer:内存缓冲区

# 3.1.3 资源系统

  • QResource:访问 Qt 资源系统(.qrc)
  • QSettings:跨平台应用程序设置存储

# 3.2 文件读写

# 3.2.1 QFile类读写

QFile 是 Qt 中用于文件读写的核心类。

1.打开文件

QFile file("example.txt");
if (!file.open(QIODevice::ReadWrite)) {
    qDebug() << "Failed to open file!";
    return;
}
1
2
3
4
5
  • QIODevice::ReadOnly:只读模式。
  • QIODevice::WriteOnly:只写模式。
  • QIODevice::ReadWrite:读写模式。
  • QIODevice::Append:追加模式。

2.读取文件

QByteArray data = file.readAll(); // 读取全部内容
qDebug() << data;
QString line;
while (!file.atEnd()) {
    line = file.readLine(); // 逐行读取
    qDebug() << line;
}
1
2
3
4
5
6
7

3.写入文件

file.write("Hello, Qt!"); // 写入数据
file.write("\nNew line");
1
2

4.关闭文件

file.close();
1

# 3.2.2 QTextStream读写

QTextStream 提供了更高级的文本读写功能。

1.读取文本

QFile file("example.txt");
if (!file.open(QIODevice::ReadOnly)) {
    qDebug() << "Failed to open file!";
    return;
}

QTextStream in(&file);
QString text = in.readAll(); // 读取全部内容
qDebug() << text;
1
2
3
4
5
6
7
8
9

2.写入文本

QFile file("example.txt");
if (!file.open(QIODevice::WriteOnly)) {
    qDebug() << "Failed to open file!";
    return;
}

QTextStream out(&file);
out << "Hello, Qt!" << Qt::endl;
out << "This is a new line.";
1
2
3
4
5
6
7
8
9

# 3.2.3 QDataStream读写

QDataStream 用于二进制数据的读写。

1.写入二进制数据

QFile file("data.bin");
if (!file.open(QIODevice::WriteOnly)) {
    qDebug() << "Failed to open file!";
    return;
}

QDataStream out(&file);
out << QString("Hello, Qt!") << qint32(123);
1
2
3
4
5
6
7
8

2.读取二进制数据

QFile file("data.bin");
if (!file.open(QIODevice::ReadOnly)) {
    qDebug() << "Failed to open file!";
    return;
}

QDataStream in(&file);
QString text;
qint32 number;
in >> text >> number;
qDebug() << text << number;
1
2
3
4
5
6
7
8
9
10
11

# 3.3 目录管理

# 3.3.1 QDir类

QDir 用于目录操作。

1.创建目录

QDir dir("new_directory");
if (!dir.exists()) {
    dir.mkpath("."); // 创建目录
}
1
2
3
4

2.遍历目录

QDir dir(".");
QStringList files = dir.entryList(QDir::Files); // 获取文件列表
foreach (QString file, files) {
    qDebug() << file;
}
1
2
3
4
5

3.删除目录

QDir dir("old_directory");
if (dir.exists()) {
    dir.removeRecursively(); // 递归删除目录
}
1
2
3
4

# 3.3.2 QFileInfo类

QFileInfo 用于获取文件或目录的详细信息。

1.获取文件信息

QFileInfo info("example.txt");
qDebug() << "File size:" << info.size();
qDebug() << "Last modified:" << info.lastModified();
qDebug() << "Is file?" << info.isFile();
1
2
3
4

# 3.4 文件监控

# 3.4.1 QFileSystemWatcher

QFileSystemWatcher 用于监控文件或目录的变化。

1.监控文件

QFileSystemWatcher watcher;
watcher.addPath("example.txt");
QObject::connect(&watcher, &QFileSystemWatcher::fileChanged, [](const QString &path) {
    qDebug() << "File changed:" << path;
});
1
2
3
4
5

2.监控目录

QFileSystemWatcher watcher;
watcher.addPath(".");
QObject::connect(&watcher, &QFileSystemWatcher::directoryChanged, [](const QString &path) {
    qDebug() << "Directory changed:" << path;
});
1
2
3
4
5

# 3.5 临时文件

# 3.5.1 QTemporaryFile

QTemporaryFile 用于创建临时文件。

QTemporaryFile tempFile;
if (tempFile.open()) {
    tempFile.write("Temporary data");
    qDebug() << "Temp file path:" << tempFile.fileName();
    tempFile.close();
}
1
2
3
4
5
6
上次更新: 2026/06/10, 11:13:41
并发与多线程
日期与时间处理

← 并发与多线程 日期与时间处理→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式