3

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

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

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

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

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

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

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

4

2 回答 2

3

您需要了解的有关Windows 应用商店应用程序中的文件访问和权限的所有信息。

于 2012-11-07T09:20:53.607 回答
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 中存储文件夹时使用的标识符相同。

于 2013-03-23T11:59:12.680 回答