HarmonyOS 鸿蒙Next 保存unit8Array到本地失败

HarmonyOS 鸿蒙Next 保存unit8Array到本地失败

代码如下
let filePath = fileUtils.getVoicesFolderPath() + dialogMsg.msgId
const file: fs.File = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let data: Uint8Array = voiceMessage.voiceData as Uint8Array
fs.writeSync(file.fd, data.valueOf());
fs.closeSync(file);
 

fs.writeSync(file.fd, data.valueOf());中,如果改为data.buffer,则值为undefined; 如何解决? data是有值的,为何会为undefined?

 


更多关于HarmonyOS 鸿蒙Next 保存unit8Array到本地失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

应该时data数据格式不匹配,转换成Uint8Array有问题。

data格式正确

如下写,数据不会报错

let buffer = data.buffer        

let file = fs.openSync(filePath, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)

try {

          fs.writeSync(file.fd, buffer) // 拷贝文件到沙箱,为了简便,这里是直接getrawfilecontent然后写入,当文件过大时内存压力会很大,如需优化,可通过buffer进行读取

          fs.close(file.fd)

          // 把沙箱中的文件第一行读出来,验证是否拷贝成功;(fs.readFileSync 方法读取整个文件)

          let data = fs.readTextSync(filePath);

          console.log('拷贝成功 success ' + data)

        } catch (err) {

          console.log('拷贝失败 error')

        }

更多关于HarmonyOS 鸿蒙Next 保存unit8Array到本地失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中保存uint8Array到本地失败的问题,可能是由于以下几个常见原因导致的:

  1. 权限问题:检查应用是否已经获得了存储权限。在鸿蒙系统中,应用需要用户授权后才能访问存储设备。确保在config.json中正确声明了存储权限,并在运行时请求用户授权。

  2. 路径问题:确保指定的保存路径是有效的,并且应用有权限写入该路径。鸿蒙系统对于应用沙箱有严格管理,不允许随意写入系统目录。

  3. 文件操作错误:检查文件打开、写入和关闭的操作是否正确。使用FileIOStream类时,确保每一步操作都返回成功状态。

  4. 内存问题:如果uint8Array数据过大,可能导致内存不足。尝试分批写入数据,或者优化内存使用。

  5. 系统限制:鸿蒙系统可能对于单次文件写入的大小有限制。如果数据过大,尝试分割数据后逐一写入。

  6. 错误处理:增加错误处理逻辑,捕获并处理可能的异常,以便准确了解失败原因。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部