今天偷懒做法,在保存文件的时候,直接把结构体写进了文件中,结果发现,这样打开文件的话读取到的都是二进制,如果其他人不知道你的结构体排布,这不也是相当于一种文件加密了嘛,具体实现是这样的

1、老办法:

//这种方法下文件内容打开就能看见,安全性非常差
QFile f(filepath);
QTextStream txtOutput(&f);
txtOutput.setCodec("UTF-8");
if(f.open(QIODevice::WriteOnly | QIODevice::Text)){txtOutput <<"Root: Hello world!!!" <<endl;f.close();
}

2、新方法

typedef struct {QString data;
}FileData;
// 写文件
QFile f(filepath);
if(f.open(QIODevice::WriteOnly | QIODevice::Text)){FileData filedata;filedata.data = "Root: Hello world!!!";f.write((const char *)&filedata,sizeof(filedata));f.close();
}
//读文件
QFile f(filepath);
FileData filedata;
if(f.open(QIODevice::ReadOnly)){QByteArray ba = f.readAll();memcpy(&filedata,ba,sizeof(filedata));f.close();
}

唉,真的是越简单越想不到,这种方法还方便了读取文件时的管理,以前自己还把文件内容加密,却忽视了这么简单的方法

追加:我这是没有试验过的代码,我后面发现,我之前这种可以是因为我的结构体的申请空间是固定的,而如果你的结构体空间不是固定的,你就会出现异常,例如上面的结构体

typedef struct {QString data;QString name;QString path;QString date;int size;
}FileData;

那么你直接写入文件中之后再打开就会出现异常,因为Qt内部对于QString的赋值操作是动态申请char类型的数组来存放的,如果你读取文件,此时你直接将文件内容写入结构体,并不能对应的得到你想要的数据反而会出现异常,如果你是固定的大小那么就没有问题

所以我重新教一个办法,只需要将文件内容压缩后再写入文件即可

Qt之文件保存的技巧相关推荐

  1. PyQt5 文件保存对话框

    Qt的文件保存对话框和文件打开对话框一样,返回的都是一个文件路径,所以调用文件对话框QFileDialog只是为了实时获取文件路径而不是对文件进行操作,文件保存操作和文件获取操作相比,文件保存操作可以 ...

  2. QT打开和保存文件对话框

    使用QFileDialog可以调用当前系统的文件对话框 包含头文件: #include <QFileDialog> (1)文件打开对话框 QString getOpenFileName ( ...

  3. 解决在使用 Qt 编译项目时出现 “C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode格式以防止数据丢失“ 的警告

    解决在使用 Qt 编译项目时出现 "C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode格式以防止数据丢失" 的警告 警告出现的原因:编 ...

  4. Qt使用MSVC编译器关闭“warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”警告的方法

    Qt使用MSVC编译器关闭"warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失"警告的方法 [问 ...

  5. MATLAB的figure文件保存成高清图片的技巧01

    figure文件保存成高清图片的技巧01 鉴于广大砖友在用MATLAB保存figure图片时,会出现图片分辨率不够高,粘贴使用不清晰,导致文章整体视觉效果欠佳的情况,我觉得有义务有责任分享一下我的经验 ...

  6. QT打开,保存文件以及判断文件是否存在

    QT获取打开文件名,保存文件名,文件路径,判断文件是否存在 QT获取打开文件名 static QString getOpenFileName(QWidget *parent = nullptr, co ...

  7. 无法保存关闭文件 苹果电脑 显示正在保存_技巧精华第5期,带你了解DXF文件、Shift键、SHX形文件、工作空间...

    CAD技巧精华❺|原创:就说我在开发区 CAD这种工具软件最大的特点就是入门容易提高难,在使用过程中伴随着各种问题的出现,往往有"横看成岭侧成峰,远近高低各不同"的困惑. 实际上, ...

  8. Qt程式异常崩溃处理技巧(Win)

    Qt程式异常崩溃处理技巧(Win) 这篇文章谈的是 Qt4 程式在视窗系统下的异常崩溃处理技巧.所以须要在头文件里包括"#include <Windows.h>". 首 ...

  9. html文件怎么导出stl文件,各种3D建模软件导出STL文件的小技巧(一)

    很多用户在提交3D模型文件的时候,常常有这样的困惑:什么是STL 格式文件,怎么获取STL 格式文件呢?STL 格式文件是在计算机图形应用系统中,用于表示三角形网格的一种文件格式.它也是3D打印机在执 ...

最新文章

  1. 收藏功能_微信强大的收藏功能,你们用了吗?
  2. ubuntu安装操作HttpSQS高速队列
  3. 用java输出真值表离散数学_离散数学 第一章 命题逻辑 1-4真值表与等价公式
  4. apicloud代码压缩和全局加密
  5. centos php5.6 phpize,centos7-install-php5.6.40
  6. 上传文件到阿里云OSS对象存储,查询访问地址,删除文件
  7. jQuery清空div内容
  8. docker+MySQL+读写分离
  9. 28_多易教育之《yiee数据运营系统》附录:扩展知识点汇总系列一
  10. mysql-世界-全球数据
  11. android 被自动安装cibn合一,Android v4.2.2 ROOT方法,可能也适用于很多同版系统的安卓电视!...
  12. dll控件安装方法(仅供参考)
  13. 量子计算机为什么低温,突破量子计算机瓶颈!超低温芯片能在接近绝对零度的温度下工作...
  14. {转载}circos绘图(2)
  15. hadoop面试题 5 ---有用
  16. 2021年NCIS医疗质量管理控制情况调查表病案首页上传
  17. 游戏中的摇杆(手写摇杆)
  18. Linux centOS 7下安装配置Tomcat
  19. Minecraft我的世界云服务器搭建教程(小白看过来)
  20. 公车艳遇_习惯累积沉淀_新浪博客

热门文章

  1. 什么是java框架结构_什么是JAVA类集框架啊?具体指的是什么?是JAVA类的框架结构么?...
  2. MySQL 5.7--------多实例部署最佳实战
  3. maven报错:Failed to execute goal on project ...: Could not resolve dependencies for project ...
  4. 总结2019,憧憬2020
  5. PP-PicoDet快速上手实现目标检测
  6. 【OpenGL学习笔记⑤】——纹理变换【glm配置+两张图片交替渐变变换 + 纹理平移 + 实现雪花飘落】
  7. 计算梯度的三种方法: 数值法,解析法,反向传播法
  8. python英雄联盟脚本是什么_用python写王者荣耀脚本!
  9. PackageManagerService根据权限等级管理权限流程分析(默认赋予apk权限)
  10. 无法登陆github官网的问题(能ping通但打不开网页)