WinRT:用于枚举库和已知文件夹之外的文件的应用程序

时间:2012-05-22 12:00:53

标签: c# windows-8 windows-runtime enumeration .net-4.5

我正在开发一个Metro应用程序,它在ListView控件中显示给定文件夹的内容。 MS决定开发人员不需要System.IO.Directory类并将其从框架中完全删除。

我正在寻找替代在地铁风格的应用程序中枚举C#中的文件。我检查了MS提供的所有枚举示例,他们似乎只使用KnownFolders类枚举Windows库,如:

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

并根据您的需要调用GetFilesAsync()GetFoldersAsync()方法。如果我只想在图片或音乐库中进行枚举,这些都是金币。但是,我希望枚举未包含在库中的目录上的文件。

任何人都知道如何在WinRT中实现这一点???

4 个答案:

答案 0 :(得分:14)

根据设计,您在Metro应用程序的这一领域非常有限。我们的想法是,Metro应用程序只能访问它可以访问的那些内容,因此您可以:

  1. 访问特定于您的应用程序的本地存储
  2. 访问少数众所周知的存储位置,或
  3. 访问特定授权的位置。
  4. 请查看http://msdn.microsoft.com/en-us/library/windows/apps/hh464959.aspx,了解您将能够访问的内容。

答案 1 :(得分:10)

来自http://tirania.org/blog/archive/2011/Sep-15.html

  

使用C#和VB时,您使用的是完整的.NET框架。但   他们选择向开发人员公开一小部分API   推动Windows 8的新愿景。

     

这一新愿景包括安全/沙盒系统和异步   节目。这就是您没有获得直接文件系统访问权限的原因   套接字访问以及您习惯使用的同步API的原因   没有暴露。

     

现在,你注意到我说“暴露”而不是“消失”。

     

他们所做的是他们只向编译器公开了一组API   当您定位Metro配置文件时。所以你的申请不会   例如,不小心调用File.Create。但在运行时,CLR   将加载完整的类库,包含的那个   File.Create,在内部,CLR可以调用类似的东西   File.Create,只是你无法访问它。

     

这种分裂类似于过去所做的   Silverlight,不是每个API都暴露在哪里,以及mscorlib在哪里   给定权利,您的应用程序不必确保系统   安全

     

您可能认为可以使用某些技巧(引用GAC   库而不是编译器引用或使用反射来获取   私有API,或P / Invoking到Win32)。但所有这些用途都会   被AppStore评论应用程序捕获,你将无法做到   通过微软的商店发布你的应用程序。

     

你仍然可以在你的系统上做任何丑陋的黑客攻击。它只是   不可能通过AppStore发布它。

所以可能没有官方方式,如果有非官方的方式,它可能不会被应用商店接受。

总的来说,这是有道理的:我不想下载一个看似合法的应用程序,只是让它扫描我的硬盘并找到包含我的银行/信用信息的“budget.xls”电子表格。

编辑:可以通过WinRT的文件选择器授予对安全文件/文件夹的临时访问权限,但必须由用户明确调用和选择。

答案 2 :(得分:0)

您可以使用StorageFolder.GetFolderFromPathAsync方法从路径中获取StorageFolder个实例。

StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"C:\...");

请注意,您可能无权对计算机上的所有路径执行此操作。

答案 3 :(得分:0)

类似的情况。想要访问chrome书签文件进行解析。最初必须使用FileOpenPicker,但它返回的文件可以是" cached"在futureaccesslist(?)中进行后续检索。