关于Qt资源文件导致sqlite3文件变只读的问题

加盾男爵 2017-12-11 10:10:00
一个程序使用SQlite3数据库,其中有个功能是数据的恢复出厂设置,程序的目录下有个文件夹./dataFile,数据库文件就放在这个文件夹下,
然后在资源文件里有
<file>data/sourceData.db</file>

这个sourceData.db文件是初始数据,然后程序里如果用户选择了恢复出厂设置,就会执行类似下面的代码

QString oldFile = tr("E:/TFH/dataFile/sourceData.db");
QString newFile = tr(":/data/sourceData.db");
QFile fs;
fs.copy(oldFile,newFile); //直接赋值替换掉用户使用的数据库文件


然后问题来了,当用户再次修改数据库文件,数据库直接回复
"attempt to write a readonly database"

这数据库文件里的数据库变只读文件了,然后我试了下,把资源文件里的直接赋值过去,既关闭程序,然后直接把E:/TFH/sourceData.db这个文件赋值替换掉E:/TFH/dataFile/sourceData.db,程序再次运行一切正常,我想问下为什么这个数据库文件放入资源文件后复制下,里面的数据库就变成只读的了?
...全文
218 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
加盾男爵 2017-12-12
  • 打赏
  • 举报
回复
引用 1 楼 dext 的回复:
这个用readAll 和write 自己复制一遍就好了QFile::copy会复制文件原本的 属性,资源文件 本来就是只读的
首先感谢版主大大凌晨3点给我回复。。。。 我想问下,如那资源文件有没有办法改为可读写
dext 2017-12-12
  • 打赏
  • 举报
回复
这个用readAll 和write 自己复制一遍就好了QFile::copy会复制文件原本的 属性,资源文件 本来就是只读的
sqlfs - 带有 SQL 后端的 Qt 文件系统引擎 Sqlfs 是一个类似于 Qt 源系统但不是只读Qt 文件系统引擎。 它的开发目的是为 Qt 应用程序提供透明的文件存储。 到目前为止,引擎仅限于 SQLite。 可以轻松实现对其他 DBMS 的支持(只需稍微调整 SQL)。 主要用例是让应用程序能够在自己的基于 SQLite 的应用程序文件中托管自己的文件系统。 特征 Qt 文件系统类透明 可以托管 QML 代码 只使用数据库中的一张表 轻量级和简单的代码 平台无关 麻省理工学院执照 用法 类似于 Qt源系统 sqlfs 使用类似前缀的 URL 将文件系统访问路由到 sqlfs: sql:/// // Open a database with an explicit connection name QSqlD

16,212

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧