2013-11-09 237 views
1

我有一个简单的Windows 8.1编写应用程序,目前我正在扩展为包含选项卡。我还为这些选项卡添加了自动保存功能,以便当用户“关闭”应用程序时,它会将文件和路径(如果其存在的文件)的内容写入本地存储中的txt文件。WinRT:关闭后再次打开之前打开的文件

这个工程很好,当文件未保存。用户关闭应用程序,重新打开所有标签页后,再次出现最新的更改。

我遇到的问题是当文件已保存。我将路径存储在txt文件中,所以我想在打开应用程序时再次打开文件,但问题是我不允许打开系统上的任何文件。用户可能已经从他的C:驱动器中打开了一个我无法读取的文件(例如,如here所述)。

关于如何解决这个问题的任何想法。我害怕我想要做的事情是不可能的。

如果需要,我可以显示一些关于保存自动保存文件的代码,但我不认为我可以显示任何与问题相关的内容。

回答

3

正如Vasile所说,一旦应用程序关闭,您将无法访问沙箱外的StorageFile。

但是,WinRT的确提供StorageApplicationPermissions类,您可以将这些权限存储在文件中。然后,您可以存储该令牌以便后续启动应用程序。

+0

谢谢奈杰尔,这正是我需要的! 我现在将打开的文件添加到StorageApplicationPermissions类的将来访问列表中,并为它们中的每个获取令牌。我将该令​​牌存储在自动保存文件中。当它重新打开时,我再次使用令牌请求文件。 作为额外的好处,它会跟踪文件在哪里移动!我只是给它一个令牌,如果它仍然在一个可访问的位置,它会给我这个文件。 – Raf

1

这是因为应用程序已被沙盒化,除012涉及用户通过Open选取器进行交互外,无法访问除Local Storage之外的其他存储区域。

假设您将文件保存在C:\。另外,将它保存在应用程序的Local Storage上。下一次,当应用程序加载时,在标签中将显示来自Local Storage的文本文件 - 进行编辑,将其保存在PC的某处并覆盖LocalStorage中的文件。这样,您使用的文件实际上就是本地存储中的文件。

你必须小心在这里与namings。如果您在C:\上保存SampleFile.txt,然后创建另一个也称为SampleFile.txt但在D:\上复制LocalStorage中的文件时,它应该与第一个不同。在这里,你必须提出自己的规则。

+0

谢谢你的帮助Vasile。 我为每个打开的文件分配一个唯一的ID,并存储令牌(来自Nigels答案),因此不存储路径。我这样避免了重复的文件名。 – Raf

相关问题