C# WinRT:枚举库和已知文件夹之外的文件的应用程序
我正在开发一个Metro应用程序,它在ListView控件中显示给定文件夹的内容。 MS决定开发人员不需要System.IO.Directory类,并将其完全从框架中删除 我正在寻找一个替代品,在metro风格的应用程序中枚举C#中的文件。我检查了MS提供的所有枚举示例,它们似乎都只使用C# WinRT:枚举库和已知文件夹之外的文件的应用程序,c#,windows-8,windows-runtime,enumeration,.net-4.5,C#,Windows 8,Windows Runtime,Enumeration,.net 4.5,我正在开发一个Metro应用程序,它在ListView控件中显示给定文件夹的内容。 MS决定开发人员不需要System.IO.Directory类,并将其完全从框架中删除 我正在寻找一个替代品,在metro风格的应用程序中枚举C#中的文件。我检查了MS提供的所有枚举示例,它们似乎都只使用KnownFolders类枚举Windows库,例如: StorageFolder picturesFolder = KnownFolders.PicturesLibrary; 并根据需要调用getfileas
KnownFolders
类枚举Windows库,例如:
StorageFolder picturesFolder = KnownFolders.PicturesLibrary;
并根据需要调用getfileasync()
或GetFoldersAsync()
方法。如果我只想在图片或音乐库中列举,这些都是黄金。但是,我希望枚举库中未包含的目录上的文件
有人知道这在WinRT中是如何实现的吗?来自:
当您使用C#和VB时,您使用的是完整的.NET框架。但是
他们选择向开发人员公开API的较小子集
推动Windows 8的新愿景
这一新愿景包括安全/沙盒系统和异步系统
编程。这就是为什么您不能直接访问文件系统或
套接字访问以及您习惯于使用的同步API的原因
没有暴露
现在,你注意到我说的是“暴露”而不是“消失”
他们所做的只是向编译器公开一组API
当你的目标是地铁概况。因此,您的应用程序将不会
意外调用文件。例如创建。但在运行时,CLR
将加载完整的类库,即包含
所以在内部,CLR可以调用
创建,只有您无权访问它
这种分裂类似于过去的分裂
Silverlight,不是每个API都被公开,mscorlib也在这里
授予应用程序不必确保系统安全的权限
安全
你可能认为你可以使用一些技巧(参考GAC)
库而不是编译器引用或使用反射来获取
到专用API,或P/调用到Win32)。但所有这些用途都将
被AppStore审查应用程序捕获,您将无法
通过Microsoft的应用商店发布您的应用程序
你仍然可以在你的系统上进行任何丑陋的黑客攻击。只是
无法通过AppStore发布
所以可能没有官方的方式,如果有非官方的方式,应用商店可能不会接受
一般来说,这是有道理的:我不想下载一个看似合法的应用程序,只是为了让它扫描我的硬盘,找到我的“budget.xls”电子表格,其中包括我的银行/信用信息
编辑:可以通过WinRT的文件选择器授予对安全文件/文件夹的临时访问权限,但必须由用户显式调用和选择。您可以使用该方法从路径获取实例
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"C:\...");
请注意,您可能没有权限对计算机上的所有路径执行此操作。根据设计,您在Metro应用程序的这一领域非常有限。其理念是,Metro应用程序只能访问其信任访问的内容,因此您可以:
查看一下,了解一下您可以访问哪些内容。类似的情况。想要访问要分析的chrome书签文件。最初不得不使用FileOpenPicker,但它返回的文件可以“缓存”在futureaccesslist(?)中,以便后续检索。Ahh,这就是我要找的页面。先告诉我,+1这些天,我在dev.windows.com和design.windows.com上生活和呼吸谢谢,这很有帮助。。但是如果你能帮我做一件事。。。当我尝试将DocumentsLibrary作为StorageFolder获取时,尽管我已在应用程序清单功能部分选中了它,但仍会出现访问被拒绝的异常。有什么想法吗???但是,我可以毫无问题地访问MusicLibrary。这不起作用,我的意思是,您可以获取该对象,但一旦尝试并访问它以枚举文件,它将抛出一个拒绝访问的异常。在完整桌面路径和非系统分区上的其他路径上尝试了它,都得到了相同的结果