HarmonyOS 鸿蒙Next 读取已有数据库db文件问题

HarmonyOS 鸿蒙Next 读取已有数据库db文件问题

已有数据库db文件 想copy到context.databaseDir目录下 读取数据库内容 写入文件到context.databaseDir一直报错

static async saveFileToCache() {
    let context = getContext() as common.UIAbilityContext;
    try {
        let res1 = fs.accessSync(context.getApplicationContext().databaseDir, fs.AccessModeType.EXIST);
        if (!res1) {
            await fs.mkdir(context.getApplicationContext().databaseDir, true)
            console.log("============= mkdir databaseDir")
        }

        // 打开文件
        let srcFile = fs.openSync(MediaStorage.getInstance().getDBFileCacheDirectory() + "/DCF.db",
        fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
        let destFile = fs.openSync(context.getApplicationContext().databaseDir + "/DCF.db",
        fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
        // 读取源文件内容并写入至目的文件
        let bufSize = 4096;
        let readSize = 0;
        let buf = new ArrayBuffer(bufSize);
        let readOptions: ReadOptions = {
            offset: readSize,
            length: bufSize
        };
        let readLen = fs.readSync(srcFile.fd, buf, readOptions);
        while (readLen > 0) {
            readSize += readLen;
            let writeOptions: WriteOptions = {
                length: readLen
            };
            fs.writeSync(destFile.fd, buf, writeOptions);
            readOptions.offset = readSize;
            readLen = fs.readSync(srcFile.fd, buf, readOptions);
        }
        // 关闭文件
        fs.closeSync(srcFile);
        fs.closeSync(destFile);

        console.log("========== saveFileToDatabase destFile " + destFile.fd)
    } catch (error) {
        console.log("========== saveFileToDatabase error " + JSON.stringify(error))
    }
}

报错信息:

[file_n_exporter.cpp:44->GetFileEntity] Failed to get file entity
[file_n_exporter.cpp:66->GetFD] Failed to get file entity
========== saveFileToDatabase error {"code":13900020}

DevEco Studio NEXT Release
Build #DS-233.14475.28.36.503900
Build Version: 5.0.3.900, built on October 8, 2024
Runtime version: 17.0.10+1-b1087.17 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11.0
GC: G1 Young Generation, G1 Old Generation
Memory: 2048M
Cores: 16
Registry:
idea.plugins.compatible.build=IC-233.14475.28


更多关于HarmonyOS 鸿蒙Next 读取已有数据库db文件问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

fs.closeSync(destFile);

console.log("========== saveFileToDatabase destFile " + destFile.fd)

这段代码fs.closeSync(destFile);文件已经关闭了。后面console里就没法拿destFile.fd了

更多关于HarmonyOS 鸿蒙Next 读取已有数据库db文件问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对“HarmonyOS 鸿蒙Next 读取已有数据库db文件问题”,以下提供直接相关的解决方案概述:

在HarmonyOS中读取已有的数据库(db)文件,通常涉及到文件系统访问和数据库管理API的使用。由于HarmonyOS支持多种编程语言开发,这里假设你使用的是其原生支持的某种语言(非Java和C语言),比如Dart或者其他兼容语言。

  1. 文件路径定位: 确保你知道db文件的存储路径。这可以是应用的私有存储区域或者通过权限访问的公共存储区域。

  2. 数据库连接: 使用HarmonyOS提供的数据库API来打开db文件。这可能涉及到创建一个数据库连接对象,并指定db文件的路径。

  3. 执行查询: 一旦数据库连接建立,你可以使用相应的API执行SQL查询来读取数据。这通常涉及到创建查询语句和解析结果集。

  4. 错误处理: 处理可能的异常,比如文件不存在、权限不足或数据库损坏等。

  5. 资源释放: 确保在操作完成后正确关闭数据库连接,以释放系统资源。

如果上述步骤未能解决你的问题,可能是由于特定的环境配置或API使用不当。请检查HarmonyOS的官方文档以获取更详细的API说明和示例代码。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部