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

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

StorageFolder picturesFolder = KnownFolders.PicturesLibrary;

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

有谁知道这在 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。因此,您的应用程序不会意外调用文件。例如创建。但是,在运行时,CLR将加载完整的类库,其中包含文件的库。在内部,CLR可以调用诸如file.file.create的内容,只是您无法访问它。

这种分裂类似于过去与Silverlight所做的事情,Silverlight并非每个API都暴露了,并且Mscorlib获得了您的应用程序不必确保系统安全的权利。

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

你仍然可以在你的系统上做任何你喜欢的丑陋的黑客行为。无法通过AppStore发布它。

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

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

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

您可以使用 StorageFolder.GetFolderFromPathAsync 获得方法 存储文件夹 来自路径的实例。

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

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

类似的情况。想要访问 chrome 书签文件来解析。最初必须使用 FileOpenPicker,但它返回的文件可以“缓存”在 futureaccesslist(?) 中以供后续检索。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top