Qt之文件保存的技巧
今天偷懒做法,在保存文件的时候,直接把结构体写进了文件中,结果发现,这样打开文件的话读取到的都是二进制,如果其他人不知道你的结构体排布,这不也是相当于一种文件加密了嘛,具体实现是这样的
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之文件保存的技巧相关推荐
- PyQt5 文件保存对话框
Qt的文件保存对话框和文件打开对话框一样,返回的都是一个文件路径,所以调用文件对话框QFileDialog只是为了实时获取文件路径而不是对文件进行操作,文件保存操作和文件获取操作相比,文件保存操作可以 ...
- QT打开和保存文件对话框
使用QFileDialog可以调用当前系统的文件对话框 包含头文件: #include <QFileDialog> (1)文件打开对话框 QString getOpenFileName ( ...
- 解决在使用 Qt 编译项目时出现 “C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode格式以防止数据丢失“ 的警告
解决在使用 Qt 编译项目时出现 "C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode格式以防止数据丢失" 的警告 警告出现的原因:编 ...
- Qt使用MSVC编译器关闭“warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失”警告的方法
Qt使用MSVC编译器关闭"warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符.请将该文件保存为 Unicode 格式以防止数据丢失"警告的方法 [问 ...
- MATLAB的figure文件保存成高清图片的技巧01
figure文件保存成高清图片的技巧01 鉴于广大砖友在用MATLAB保存figure图片时,会出现图片分辨率不够高,粘贴使用不清晰,导致文章整体视觉效果欠佳的情况,我觉得有义务有责任分享一下我的经验 ...
- QT打开,保存文件以及判断文件是否存在
QT获取打开文件名,保存文件名,文件路径,判断文件是否存在 QT获取打开文件名 static QString getOpenFileName(QWidget *parent = nullptr, co ...
- 无法保存关闭文件 苹果电脑 显示正在保存_技巧精华第5期,带你了解DXF文件、Shift键、SHX形文件、工作空间...
CAD技巧精华❺|原创:就说我在开发区 CAD这种工具软件最大的特点就是入门容易提高难,在使用过程中伴随着各种问题的出现,往往有"横看成岭侧成峰,远近高低各不同"的困惑. 实际上, ...
- Qt程式异常崩溃处理技巧(Win)
Qt程式异常崩溃处理技巧(Win) 这篇文章谈的是 Qt4 程式在视窗系统下的异常崩溃处理技巧.所以须要在头文件里包括"#include <Windows.h>". 首 ...
- html文件怎么导出stl文件,各种3D建模软件导出STL文件的小技巧(一)
很多用户在提交3D模型文件的时候,常常有这样的困惑:什么是STL 格式文件,怎么获取STL 格式文件呢?STL 格式文件是在计算机图形应用系统中,用于表示三角形网格的一种文件格式.它也是3D打印机在执 ...
最新文章
- 收藏功能_微信强大的收藏功能,你们用了吗?
- ubuntu安装操作HttpSQS高速队列
- 用java输出真值表离散数学_离散数学 第一章 命题逻辑 1-4真值表与等价公式
- apicloud代码压缩和全局加密
- centos php5.6 phpize,centos7-install-php5.6.40
- 上传文件到阿里云OSS对象存储,查询访问地址,删除文件
- jQuery清空div内容
- docker+MySQL+读写分离
- 28_多易教育之《yiee数据运营系统》附录:扩展知识点汇总系列一
- mysql-世界-全球数据
- android 被自动安装cibn合一,Android v4.2.2 ROOT方法,可能也适用于很多同版系统的安卓电视!...
- dll控件安装方法(仅供参考)
- 量子计算机为什么低温,突破量子计算机瓶颈!超低温芯片能在接近绝对零度的温度下工作...
- {转载}circos绘图(2)
- hadoop面试题 5 ---有用
- 2021年NCIS医疗质量管理控制情况调查表病案首页上传
- 游戏中的摇杆(手写摇杆)
- Linux centOS 7下安装配置Tomcat
- Minecraft我的世界云服务器搭建教程(小白看过来)
- 公车艳遇_习惯累积沉淀_新浪博客
热门文章
- 什么是java框架结构_什么是JAVA类集框架啊?具体指的是什么?是JAVA类的框架结构么?...
- MySQL 5.7--------多实例部署最佳实战
- maven报错:Failed to execute goal on project ...: Could not resolve dependencies for project ...
- 总结2019,憧憬2020
- PP-PicoDet快速上手实现目标检测
- 【OpenGL学习笔记⑤】——纹理变换【glm配置+两张图片交替渐变变换 + 纹理平移 + 实现雪花飘落】
- 计算梯度的三种方法: 数值法,解析法,反向传播法
- python英雄联盟脚本是什么_用python写王者荣耀脚本!
- PackageManagerService根据权限等级管理权限流程分析(默认赋予apk权限)
- 无法登陆github官网的问题(能ping通但打不开网页)