在Windows10通用Javascript应用程序中写入文件有时会失败
Writing to File Sometimes Failing in Windows 10 Universal Javascript App
我开发了一个适用于Windows的通用应用程序。它是在我的业务中部署的,而不是通过应用商店。它99.9%的时间都能完美发挥作用。
但有一个问题已经发生过好几次了。
我将JSON格式的持久数据存储在应用程序本地数据文件夹中。
为了存储我的数据,我使用:
var storeData = function () {
return WinJS.Application.local.writeText('data', JSON.stringify(dataObject));
}
为了加载我的数据,我使用:
var loadData = function () {
return WinJS.Application.local.readText('data').then(function (text) {
dataObject = text ? JSON.parse(text) : {};
})
}
在loadData方法中,有几次我的应用程序崩溃。当我研究它崩溃的原因时,发现我的本地appdata文件夹中有一个额外的文件。显然,应该在那里的文件被称为"data"——这个额外的文件被称作"data84DB.TMP"或类似的东西——显然是作为API文件的一部分创建的临时文件。在我的应用程序崩溃的情况下,这个文件中有你通常希望在"数据"文件中看到的信息,"数据"不再是文本格式,当我在SublimeText中打开它时,它会显示"0000"。
因此,当我的loadData函数运行时,它会崩溃。
现在,我不希望它在这种情况下默默地失败。我宁愿它崩溃,而不是在loadData中尝试捕获并使我的dataObject为空,或者在数据保存不正确的情况下。我宁愿它崩溃,这样至少我可以找到.TMP文件并恢复未正确保存的信息。
这个问题正常吗?我是否没有遵循读取和写入持久数据的最佳实践?如何解决此问题?你们知道是什么原因吗?可能是应用程序在文件写入操作过程中意外关闭?
我认为最好的做法应该是异步读取和保存。我猜WinJS.Application.local
是WinRT API的包装器,但它是同步工作的。我建议使用Windows.Storage.FileIO.writeTextAsync
和Windows.Storage.FileIO.readTextAsync
。
我还发现,当要解析的字符串为空(")时,JSON.parse
会崩溃(引发错误)。在您的情况下,我看到它也可能是一个问题,因为您只在它为null或未定义的情况下进行测试,而不是在它为空的情况下。
- $codovaFileTransfer下载非JPEG文件失败
- 在 Firefox 中加载带有 require.js 的文本文件失败:“AccessControlException”
- 在jspdf中使用addHTML保存pdf文件失败
- 加载远程 JavaScript 文件失败是否会停止在任何浏览器中执行 JavaScript
- 通过 Ajax 和 FormData 发送文件失败
- 使用 fs.readFileSync() 提供 html 文件失败
- 当包含 package.json 文件失败时使用 webpack
- 如何从Ajax调用PHP文件失败中获取更多信息
- 访问服务器上的文件失败
- 使用multer上载多个文件失败
- 引导模式窗口并多次包含Javascript文件失败
- CryptoJS解密C#DES加密文件失败
- 在某些系统上加载3.8MB的d3.csv文件失败
- Javascript间玉文件失败
- 使用jQuery's Form Data()和Ajax提交文件失败
- 导入javascript CSS文件失败
- 如何警告angular ui网格导入文件失败
- 迁移& lt; script>…& lt; / script>To .js文件失败
- 加载静态文件失败
- 当同时添加2个文件时,重命名文件失败