Windows 8 App和访问文件系统

时间:2012-11-07 09:10:26

标签: c# windows-8 file-access

我正处于项目的开始阶段,我想知道应该使用哪种技术。 在我的小研究中,我发现WinRT API有点令人愉快,我真的很喜欢用户界面中的瓷砖网格概念。

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

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

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

因为E_ACCESSDENIED,这就是原因。 Windows 8让我尖叫“拒绝访问”。

有什么方法可以我喜欢的方式存储我的数据,或Win8h4x0r证明?

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

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

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

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中时使用的标识符相同。