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

Zai*_*mir 6 c# enumeration windows-8 windows-runtime .net-4.5

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

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

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
Run Code Online (Sandbox Code Playgroud)

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

任何人都知道在WinRT中这是怎么可能的???

Rob*_*cus 14

按照设计,您在Metro应用程序的这一领域非常有限.我们的想法是,Metro应用程序只能访问受信任访问的内容,因此您可以:

  1. 访问特定于您的应用程序的本地存储
  2. 访问一些众所周知的存储位置,或
  3. 访问特定授权的位置.

请查看http://msdn.microsoft.com/en-us/library/windows/apps/hh464959.aspx,了解您将能够访问的内容.


Chr*_*air 10

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

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

这一新愿景包括安全/沙盒系统和异步编程.这就是您无法获得直接文件系统访问或套接字访问以及为什么不会公开您习惯使用的同步API的原因.

现在,你注意到我说"暴露"而不是"消失".

他们所做的是,当您定位Metro配置文件时,他们只向编译器公开了一组API.因此,您的应用程序不会意外调用File.Create.但是在运行时,CLR将加载完整的类库,包含File.Create,因此在内部,CLR可以调用类似File.Create的东西,只有你才能访问它.

这种拆分类似于Silverlight过去所做的,不是每个API都暴露出来的,并且mscorlib被授予了应用程序无需确保系统安全的权利.

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

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

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

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

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