C# Windows 8应用程序和对文件系统的访问
我的项目刚刚开始,我想知道我应该使用哪种技术。 在我的小研究中,我发现WinRTAPI有点令人愉快,我非常喜欢UI中的平铺网格概念 唯一的问题是,我的应用程序将生成大量数据——重要数据——我必须将这些数据存储在本地机器的某个地方。我所说的“某处”是指使用不同于操作系统的分区 那么,为什么不试试这个简单的代码呢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
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风格下使用遥测应用程序”。简单明了:)