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

本文关键字:外部 文件夹 文件 应用 用于 枚举 WinRT | 更新日期: 2023-09-27 18:34:52

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

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

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

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

任何人都知道这在 WinRT 中是如何实现

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

的???

根据设计,对于 Metro 应用程序,您在这方面非常有限。 这个想法是,Metro 应用只能访问它受信任访问的内容,因此你可以:

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

查看 http://msdn.microsoft.com/en-us/library/windows/apps/hh464959.aspx 以了解您可以访问的内容。

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

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

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

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

他们

所做的是他们只向编译器公开一组API。 当您定位地铁配置文件时。所以你的应用程序不会 例如,意外调用 File.Create。不过,在运行时,CLR 将加载完整的类库,即包含 File.Create,所以在内部,CLR 可以调用类似的东西 File.Create,只有你无法访问它。

这种分裂类似于过去所做的 Silverlight,不是每个API都公开了,mscorlib在哪里 赋予您的应用程序不必确保系统的权利 安全。

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

您仍然可以在系统上做任何丑陋的黑客攻击。它只是 将无法通过应用商店发布。

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

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

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

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

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

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

类似的情况。 想要访问要解析的chrome书签文件。 最初不得不使用FileOpenPicker,但它返回的文件可以"缓存"在未来访问列表(?(中以供后续检索。