帖子
帖子
用户
博客
课程
显示全部楼层
130
帖子
2
勋章
3398
Y币

[多端开发] fs writeByLength

[复制链接]
发表于 2024-5-13 14:36:13
文件写入后app还在开启的状态设备突然关机了再重启这个写入就会不保存,如果写入后不重启然后查看了文件后这个写入就会一直保存。
请问这是什么情况?要怎么解决这个不保存的问题
0
帖子
2
勋章
1497
Y币
「请问这是什么情况?」
写入不是瞬间完成的,需要开始、写入中、写入完成,整个的流程。上面反馈的情况,估计是在突然关机状态下,虽然启动了写入,但这个写入过程并没有完成,导致最终没有写入成功。

「要怎么解决这个不保存的问题」
你可以在写入这个动作触发之前,在获取到写入内容的时候,自己就缓存一份内容到本地,然后执行写入前定义一个本地缓存变量用于标记这个写入,在写入完成后删除该标识。
在App启动后,先检查本地持久化缓存中是否存在你定义的标识变量,如果存在则根据该变量找到未写入的文件内容,再次进行写入(这里可以根据你自己的业务逻辑,选择显式的用弹窗提示用户去重新写入,也可以在后台进行静默的文件写入)

130
帖子
2
勋章
3398
Y币
至高吾·尚 · 2024-5-13 14:51「请问这是什么情况?」
写入不是瞬间完成的,需要开始、写入中、写入完成,整个的流程。上面反馈的情况,估计是在突然关机状态下,虽然启动了写入,但这个写入过程并没有完成,导致最终没有写入成功。


我是先写入,然后再读取,读取的时候是有看到写入的信息,然后这时候就重启了,开机之后读取就没有这个写入的信息,看文件里面也没有,这也算是没写入成功吗
0
帖子
2
勋章
1497
Y币


如果先将内容写入了文件,然后再读取这个被写入的文件,然后你眼睛已经看到被写入文件打开后的内容中存在你写入的内容,正常是不会出现你反馈的问题的,这个本身就是悖论。

因为你打开的是一个持久化的文件,数据本身已经写入了手机的存储介质中,怎么可能消失。如果存在,要不就是你写入的逻辑有问题(读取时并没有真正的写入完成),要不就是读取的逻辑有问题(读取时,并没有真正读取写入的文件内容,而是读取在内存中的缓存文件内容),具体哪里有问题,就要你自己看你代码怎么写的去排查了。

另外,关于你读取文件时,恰好重启了这个是一个极小概率的事件,正常你这个写入功能对于实时性、内容完整性要求不是那么严格的话,这一点小瑕疵是可以忽略的。
如果严格校验的逻辑,那你就向我描述的那样,在写入前自己写一段二次校验写入内容是否成功的逻辑(类似我上面的加入标识标记),自己通过代码逻辑去保证这次写入的一定成功。
您需要登录后才可以回帖 登录

本版积分规则