当前位置: 首页 > news >正文

qt QSaveFile详解

QSaveFile 是 Qt 提供的一个类,用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性,以防止文件损坏。使用 QSaveFile,您可以创建一个临时文件,并在成功写入后将其重命名为目标文件,这样可以避免在写入过程中出现错误而导致数据丢失或文件损坏。

1. 构造函数

  • QSaveFile(const QString &fileName): 构造一个 QSaveFile 对象,指定要保存的文件名。

  • QSaveFile(QObject *parent = nullptr): 构造一个 QSaveFile 对象,指定父对象。

2. 主要方法

文件操作
  • bool open(QIODevice::OpenMode mode): 打开文件以进行写入。返回值指示是否成功打开。

  • bool commit(): 提交写入的更改,将临时文件重命名为目标文件。必须在成功写入后调用此方法。

  • void abort(): 放弃写入,删除临时文件。

数据写入
  • qint64 write(const QByteArray &data): 将字节数组写入文件,返回写入的字节数。

  • qint64 write(const char *data, qint64 maxSize): 将原始数据写入文件,返回写入的字节数。

  • bool putChar(char ch): 写入一个字符,返回值指示是否成功写入。

  • bool putString(const QString &string): 写入字符串,返回值指示是否成功写入。

其他方法
  • QString fileName() const: 获取目标文件名。

  • QString errorString() const: 获取最近的错误信息。

  • bool isOpen() const: 检查文件是否已打开。

  • void close(): 关闭文件。

  • void cancelwriting():取消写入文件,删除临时文件并不影响原文件。

3.常用信号

  • void aboutToClose() : 当文件即将关闭时发出该信号(继承自 QFile)
  • void bytesWritten(qint64 bytes) : 每次写入数据后触发该信号(继承自 QFile )
  • void readyRead() : 当有数据可供读取时发出该信号(继承自 QFile)。
#include <QCoreApplication>
#include <QSaveFile>
#include <QTextStream>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);QString fileName = "example.txt";QSaveFile saveFile(fileName);// 尝试打开文件if (!saveFile.open(QIODevice::WriteOnly)) {qWarning() << "Unable to open file for writing:" << saveFile.errorString();return 1;}// 使用 QTextStream 写入数据QTextStream stream(&saveFile);stream << "Hello, World!" << endl;// 提交更改if (!saveFile.commit()) {qWarning() << "Unable to save file:" << saveFile.errorString();return 1;}qDebug() << "File saved successfully:" << fileName;return app.exec();
}

觉得有帮助的话,打赏一下呗。。

           

http://www.lryc.cn/news/469563.html

相关文章:

  • 【Linux】线程池详解及其基本架构与单例模式实现
  • 运输层知识点汇总3
  • 浔川社团官方联合会提前入驻
  • 比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis
  • C++研发笔记8——C语言程序设计初阶学习笔记6
  • 0softmax和背后的最大熵(极大似然法)
  • 6,000 个网站上的假 WordPress 插件提示用户安装恶意软件
  • 最新Compose环境版本
  • 流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(一)
  • 【智能大数据分析 | 实验四】Spark实验:Spark Streaming
  • es实现自动补全
  • 【日志】Unity3D模型导入基本问题以及浅谈游戏框架
  • 1.8K Star,简洁易用 Web 端创意画板
  • WPF中的<Style.Triggers>
  • pod相关面试题总结(持续更新)
  • Matlab学习03-符号的替换及运算(接上一篇)
  • Windows中API-磁盘管理笔记
  • 010 操作符详解 上
  • 【贪心算法】(第十篇)
  • 029.爬虫专用浏览器-抓取跨域#document下的内容
  • SIP 业务举例之 Call Hold(呼叫保持)
  • eks节点的网络策略配置机制解析
  • 【C】用c写贪吃蛇
  • qt QLineEdit详解
  • DevEco Studio的使用 习题答案<HarmonyOS第一课>
  • 鸿蒙网络编程系列36-固定包头可变包体解决TCP粘包问题
  • 【华为路由】OSPF多区域配置
  • 【C++初阶】一文讲通C++内存管理
  • Vue学习笔记(九、简易计算器)
  • Maven 不同环境灵活构建