HarmonyOS 鸿蒙Next fs.write()报错Illegal write buffer or encoding

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next fs.write()报错Illegal write buffer or encoding

请教个问题,调用fs.write(),入参传入string时能正常保存,传入ArrayBuffer时会报错

C04388/file_api com.example E [common_func.cpp:435->GetWriteArg] Illegal write buffer or encoding,错误码是

13900020 - Invalid argument

用的是模拟器,版本是cke_3909.png

deveco版本是

Build Version: 5.0.3.403, built on June 20, 2024

Runtime version: 17.0.10+1-b1087.17 x86_64

VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.

4 回复
我的ArrayBuffer是从native C++中获取到的,直接调用fs.writeSync会报上述错误,但“let arrUint8 = new uint8Array(ArrayBuffer);”再将arrUint8.buffer放入writeSync中便能正常写入了,具体原因尚不清楚

// 新建并打开文件 let file = fs.openSync(filesDir + ‘/test.txt’, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); // 写入一段内容至文件 let writeLen = fs.writeSync(file.fd, “Try to write str.”);

是按照这样的形式写的,如果写入的是string,是可以的,但把写入的数据(即"Try to write str."部分)改成uint8Array,便会报错E [common_func.cpp:435->GetWriteArg] Illegal write buffer or encoding

在HarmonyOS(鸿蒙)开发中,遇到fs.write()报错“Illegal write buffer or encoding”通常是因为传递给fs.write()的缓冲区或编码格式不正确。请确保:

  1. 传递给fs.write()的缓冲区是有效的,如使用ArrayBufferTypedArrayDataView等。
  2. 如果指定了编码,确保它是系统支持的编码格式,如’utf8’、'ascii’等。
  3. 检查缓冲区是否已被正确初始化且未超出其界限。

如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部