C# Windows 8应用程序和对文件系统的访问

C# Windows 8应用程序和对文件系统的访问,c#,windows-8,file-access,C#,Windows 8,File Access,我的项目刚刚开始,我想知道我应该使用哪种技术。 在我的小研究中,我发现WinRTAPI有点令人愉快,我非常喜欢UI中的平铺网格概念 唯一的问题是,我的应用程序将生成大量数据——重要数据——我必须将这些数据存储在本地机器的某个地方。我所说的“某处”是指使用不同于操作系统的分区 那么,为什么不试试这个简单的代码呢 await Windows.Storage.PathIO.WriteTextAsync(@"d:\tests\test.txt", "Hello World"); 因为E_ACCESSD

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

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

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

await Windows.Storage.PathIO.WriteTextAsync(@"d:\tests\test.txt", "Hello World");
因为
E_ACCESSDENIED
,这就是原因。Windows 8给了我一记耳光,尖叫着“访问被拒绝”

是否有任何方法可以以我喜欢的方式存储数据,或者
Win8
h4x0r


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

您需要了解的所有信息。

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

Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
这将使用漫游配置文件空间,因此它将存储在云或域配置文件中

Windows.Storage.ApplicationDataContainer settings = Windows.Storage.ApplicationData.Current.LocalSettings;
这将使用本地配置文件空间

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

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

Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.ApplicationData.Current.RoamingSettings;
首先,需要使用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);

值FastLocation仅表示它将只返回本地驱动器。“TargetFolderToken”与您在FutureAccessList中存储文件夹时使用的标识符相同。

谢谢。但是当Windows崩溃时会发生什么呢?所有文件都在系统分区上-
应用程序安装目录
应用程序数据位置
,当sysadmin执行恢复时,所有这些位置都将被清除。如果执行恢复,则无法执行擦除数据的操作,这是一件好事。如果你的应用程序突然耗尽了我所有的可用空间,我想在删除你的应用程序时清除所有数据。开发人员根本没有(也不应该)权利说“嘿,我的数据很重要,所以不要删除它。永远不要!”系统恢复也是如此。这是用户的机器,而不是开发者的。这是工业自动化。此数据用于生成报告。这就是为什么我希望它位于另一个分区上,以便sysadmin可以在恢复期间清除操作系统分区。当然,我可以将数据保存在主服务器上—我也可以—但到服务器的连接很慢—这就是为什么数据被缓存在计算机上的原因。我有我的答案给我的老板:“我不能在Windows8风格下使用遥测应用程序”。简单明了:)