我正在开发一个Metro应用程序,它在ListView控件中显示给定文件夹的内容。 MS决定开发人员不需要System.IO.Directory类并将其从框架中完全删除。
我正在寻找替代在地铁风格的应用程序中枚举C#中的文件。我检查了MS提供的所有枚举示例,他们似乎只使用KnownFolders
类枚举Windows库,如:
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
并根据您的需要调用GetFilesAsync()
或GetFoldersAsync()
方法。如果我只想在图片或音乐库中进行枚举,这些都是金币。但是,我希望枚举未包含在库中的目录上的文件。
任何人都知道如何在WinRT中实现这一点???
答案 0 :(得分:14)
根据设计,您在Metro应用程序的这一领域非常有限。我们的想法是,Metro应用程序只能访问它可以访问的那些内容,因此您可以:
请查看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(?)中进行后续检索。