HarmonyOS 鸿蒙Next writeSync 写文件读文件长度不一致问题
HarmonyOS 鸿蒙Next writeSync 写文件读文件长度不一致问题
发现从网上接收的文件写入本地后,再读出来,读出来的内容只有写入的一半左右,后面的被截掉了。
写文件
let pathDir = globalThis.mainAbilityContext.filesDir;
let fileStr:string=pathDir+"/"+fileName;
let destFile = fs.openSync(fileStr, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); //若不存在则创建
// 写入至目的文件
let newsBuffer:Uint8Array=TQMisc.stringToUint8Array(str);
let buf:ArrayBuffer=newsBuffer.buffer;
if (newsBuffer.length > 0) {
let len=fs.writeSync(destFile.fd, buf);
TQMisc.debug(TAG,`write news file ${fileName} len:${len}`);
}
打印出来的
NewsModel write news file 20240704C.dat len:5222
读文件
static Uint8ArrayToStringWithEncoding(dataView:Uint8Array,encoding:string):string{
let decoder = util.TextDecoder.create(encoding, {
ignoreBOM: true
})
let str= decoder.decodeWithStream(dataView,{stream: false});
return str;
}
let length=size;
let buf = new ArrayBuffer(length);
let readLen = inputStream.readSync(buf, { offset: 0, length: length });
let dataView: Uint8Array = new Uint8Array(buf);
let wholeStr=TQMisc.Uint8ArrayToStringWithEncoding(dataView,'utf-8');
TQMisc.debug(TAG,`read news buffer length:${readLen} convert string length:${wholeStr.length}`)
打印出来
NewsModel read news buffer length:5222 convert string length:2964
更多关于HarmonyOS 鸿蒙Next writeSync 写文件读文件长度不一致问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
问题貌似写文件的地方。
```css
let newsBuffer:Uint8Array=TQMisc.stringToUint8Array(str);
这里
原来写法
static stringToUint8Array(str:string):Uint8Array{
let tmpUint8Array:Uint8Array=new Uint8Array(str.length);
TQMisc.textEncoder.encodeIntoUint8Array(str,tmpUint8Array);
}
改为:
let newsBuffer:Uint8Array=TQMisc.stringToUint8Array(str,2*str.length);
包含中文,转成unit8array,每个字符串占2位unit8,那么2倍的buffer才足够,否则有一部分被截掉。
static stringToUint8Array(str:string,len?:number):Uint8Array{
let tmpUint8Array:Uint8Array=new Uint8Array(str.length);
if(len!=undefined){
tmpUint8Array=new Uint8Array(len);
}
TQMisc.textEncoder.encodeIntoUint8Array(str,tmpUint8Array);
return tmpUint8Array
}
更多关于HarmonyOS 鸿蒙Next writeSync 写文件读文件长度不一致问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这样就没问题了吗?
读写文件内容大部分是中文
针对HarmonyOS(鸿蒙)系统中writeSync
写文件后读文件长度不一致的问题,这通常可能是由于以下几个原因导致的:
-
文件写入未完全刷新:在调用
writeSync
后,虽然数据被写入了文件系统的缓冲区,但可能尚未实际写入磁盘。如果随后立即读取文件,可能会读取到旧的数据或者部分数据。可以通过调用fsync
或类似方法来确保数据被完全刷新到磁盘。 -
文件指针位置:在写入后读取文件前,需要确保文件指针(或称为文件游标)位于文件的开始位置。如果文件指针在写入后未被重置,读取操作将从当前文件指针位置开始,可能导致读取到的数据长度不正确。
-
并发访问:如果有多个进程或线程同时访问同一个文件,可能会导致数据不一致。确保文件访问的同步性,避免并发写入或读取冲突。
-
文件系统错误或损坏:检查文件系统是否存在错误或损坏,这可能导致文件读写操作异常。
检查以上几点,确保写入操作正确完成,文件指针位置正确,以及文件访问的同步性。如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html 。