如何从数据库文件中创建 QByteArray

Posted

技术标签:

【中文标题】如何从数据库文件中创建 QByteArray【英文标题】:How to make a QByteArray from a Database file 【发布时间】:2016-09-01 00:42:21 【问题描述】:

使用 QT5 中的QByteArray QIODevice::readAll(),我能够从 txt 文件或图像创建字节数组,然后使用解码并正确重新创建文件。但是,当我尝试使用 .db 文件(SQLITE)时,它不起作用。

我注意到,当您使用文本编辑器打开 .db 时,您会看到“SQLite 格式 3”后跟编码字符。从 .db 文件创建 QByteArray,然后 decode() 重新创建文件后,当我用文本编辑器打开它时,文件只包含文本“SQLite 格式 3”。

QByteArray 是否仅适用于 txt 文件或图像文件?

如果是这样,我如何从 .db (SQLITE) 文件中创建一个字节数组。

谢谢


Update1(以下代码有效):

QFile file("C:/database.db");
if(!file.open(QIODevice::ReadOnly))
    qDebug()<<"You are stupid!";

QByteArray byteArray = file.readAll();

QFile file2("C:/database2.db");
file2.open(QIODevice::WriteOnly);
file2.write(byteArray);

file2.close();
file.close();

更新2:

关于我在最初的问题中提到的解码,我使用的是以下内容:

QString QFile::decodeName(const QByteArray & localFileName)

当您仔细阅读文档时,这是没有意义的,而且是错误的。 :)

【问题讨论】:

decode() 是什么意思?请展示一个最小的独立示例。这应该很容易,你做错了什么。 不,QByteArray 不在乎里面有什么。 【参考方案1】:

您不应使用 QIODevice::Text 标志打开该文件。

查看http://doc.qt.io/qt-5/qiodevice.html#OpenModeFlag-enum

【讨论】:

以上是关于如何从数据库文件中创建 QByteArray的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中,如何从数据中创建音频文件(.wav、.mp3)文件?

当我们从 s3 中的 csv 文件读取数据并在 aws athena 中创建表时如何跳过标题。

如何从 python 在 mysql 中创建存储过程?

如何从 Blob 中的 CSV 文件在 SQL 数据库中创建一个表,其中包含通过数据流或 ADF 管道的所有列名及其数据类型?

从缓冲区数据中创建一个 .caf 文件

如何从 QByteArray 获取结构