【问题标题】:Windows 8 App and access to file systemWindows 8 应用程序和对文件系统的访问
【发布时间】:2012-11-07 09:10:26
【问题描述】:

我的项目刚刚开始,我想知道我应该使用哪种技术。 在我的小研究中,我发现 WinRT API 有点令人愉快,我非常喜欢 UI 中的平铺网格概念。

唯一的问题是我的应用程序会生成大量数据——重要数据——我必须将这些数据存储在本地机器的某个位置。 “某处”是指使用与操作系统不同的分区。

那么,为什么不试试这个简单的代码呢。

await Windows.Storage.PathIO.WriteTextAsync(@"d:\tests\test.txt", "Hello World");

因为E_ACCESSDENIED,这就是原因。 Windows 8 打了我一巴掌,大喊“拒绝访问”。

有什么方法可以让我以我喜欢的方式存储我的数据,或者Win8 也证明了h4x0r?

不,“制作桌面应用程序”不是正确答案。

【问题讨论】:

    标签: c# windows-8 file-access


    【解决方案1】:

    关于file access and permissions in Windows Store Apps你需要知道的一切。

    【讨论】:

    • 谢谢。但是什么时候Windows会崩溃呢?所有文件都在系统分区上——Application install directory、Application data locations——当系统管理员进行恢复时,所有这些位置都将被清除。
    • 如果您进行恢复,您就不能对擦除数据做任何事情,这是一件好事。如果你的应用突然用完我所有的可用空间,我想在我删除你的应用时炸毁所有数据。开发人员根本没有(并且不应该)有权说“嘿,我的数据很重要,所以不要删除它。永远!”系统恢复也是如此。这是用户的机器,而不是开发者的机器。
    • 是工业自动化。此数据用于生成报告。这就是为什么我希望它在另一个分区上,所以系统管理员可以在恢复过程中清除操作系统分区。当然,我可以将数据保存在主服务器上——我确实这样做了——但与服务器的连接速度很慢——这就是数据被缓存在操作员机器上的原因。我有我的老板的答案:“我不能做 Windows 8 风格的遥测应用程序”。它简单明了:)
    【解决方案2】:

    首先,在存储配置数据时,您有两种选择:

    Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
    

    这将使用漫游配置文件空间,因此它将存储在云或域配置文件中

    Windows.Storage.ApplicationDataContainer settings = Windows.Storage.ApplicationData.Current.LocalSettings;
    

    这将使用本地配置文件空间

    当然,它们最终都将存储在您的用户 %appdata% 下,但如果我正确理解所有内容,漫游的实际上将被同步 :)

    因此,对于您希望存储在另一个分区上的应用程序数据:

    首先您需要使用 FolderPicker 选择位置

    var folderPicker = new Windows.Storage.Pickers.FolderPicker();
    //Add some other yada yada to make the picker work as needed
    StorageFolder folder = await folderPicker.PickSingleFolderAsync();
    

    然后你需要把选中的文件夹放到一个访问列表中,记住它是允许使用这个文件夹的

    StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder);
    

    这样应用程序/系统将跟踪它是否允许在将来使用此文件夹。所选文件夹可能位于文件系统中您有权访问的任何位置。

    最后,如果您不想在下次启动应用程序时取回所选文件夹,则只需执行相反的操作:

    StorageFolder folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync("TargetFolderToken",AccessCacheOptions.FastLocationsOnly);
    

    值 FastLocationsOnly 意味着它只会返回本地驱动器。 “TargetFolderToken”与您将文件夹存储在 FutureAccessList 中时使用的标识符相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多