2012-10-05 30 views
1

我已经构建了一个Windows应用商店,它使用Windows.Storage.FileIO(createFileAsync,readTextAsync和writeTextAsync)写入本地文件。Metro Style应用程序HTML/JS编写本地文件

我的计划是使用该文件作为简单的数据库(数据简单地是JSON格式的用户信息)。这是一个坏主意吗?

以这种方式写入的文件是否真的存在(或在应用程序更新时被删除)?用户可以自己删除它们(例如,通过删除cookies/temp网络文件或类似的东西)?

我只是想知道如何通过应用程序写入到本地磁盘上的文件是由“新城”环境处理...

回答

11

它是否是一个“坏主意”的问题是相当主观的,所以可能不会那是正确的场地。

但是,就Windows Store应用程序如何处理存储的文件而言,如果使用Windows.Storage.ApplicationData.current.localFolder创建和/或编辑文件,这些文件将一直可用,直到用户卸载该应用程序。如果您将应用的更新推送到商店,并且用户下载并安装更新,则这些文件将保留在用户的计算机上,除非您以编程方式明确修改它们。

在我构建的两个应用程序中,我利用localFolder存储应用程序数据的JSON表示,以便最小化启动时间,并在应用程序启动并呈现其初始状态后刷新后台数据UI给用户。

这里是我的代码(这也许可以优化的位)看起来像:

appData.current.localFolder.createFileAsync("leaderboard.txt", 
    Windows.Storage.CreationCollisionOption.openIfExists) 
.then(function (file) { 
    leaderboardFile = file; 
    return Windows.Storage.FileIO.readTextAsync(file) 
}) 
.then(function (fileContents) { 
    cachedLeaderboard = fileContents; 
    if (!cachedLeaderboard || isRefresh) { 
     return WinJS.xhr(xhrOptions) 
    } 
    else { 
     cachedLeaderboard = JSON.parse(cachedLeaderboard); 
     List = new WinJS.Binding.List(cachedLeaderboard); 
     completed(List); 
    } 
}) 
.then(function (result) { 
    if (result) { 
     var items = JSON.parse(result.responseText).d; 
     localLeaderboard = items; 
     return Windows.Storage.FileIO.writeTextAsync(leaderboardFile, 
      JSON.stringify(localLeaderboard)) 
    } 
}) 
.then(function() { 
    if (!localLeaderboard) 
    localLeaderboard = cachedLeaderboard; 
    List = new WinJS.Binding.List(localLeaderboard); 
    completed(List); 
}) 

基本上,代码将检查leaderboard.txt文件是否存在(或如果呼叫是的刷新数据),如果没有,则进行XHR调用以获取数据,然后创建一个绑定列表并将其传递回包装在承诺中的调用方(承诺代码未显示)。如果文件存在,并且请求不是刷新,我只是解析文本文件并从中创建绑定列表。

希望有帮助!

+0

谢谢,这基本上是我需要听到:) – mat

+0

很高兴我可以帮助! – devhammer

相关问题