如何在Windows Phone Runtime中获取StorageFolder中的所有文件?

我想获取文件夹及其子文件夹中的所有文件。 但像这样的扁平查询:

var allFiles = await myFolder.GetFilesAsync(Windows.Storage.Search.CommonFileQuery.OrderByName); 

抛出ArgumentExceptionexception:

发生了’System.ArgumentException’类型的第一次机会exception

附加信息:价值不在预期范围内。

在我逐个查询子文件夹之前,还有其他方法吗?

您想要所有文件和文件夹,它们是根文件夹的后代,而不仅仅是浅层的文件。 对于大多数文件夹,枚举所有内容及其子文件夹内容的唯一方法是:

  1. 对文件使用StorageFolder.GetFilesAsync()
  2. 使用StorageFolder.GetFoldersAsync()检索所有子文件夹
  3. 对在步骤2中找到的所有子文件夹递归重复。

如果您正在寻找特定类型的媒体,有一种解决方法。 说明在这里 。 这些位置组合和CommonFile / FolderQuery选项将使设备深入搜索媒体并返回有序结果。

使用CommonFileQuery.OrderByName这也是一个深度查询,因此结果将包含来自所有子文件夹和IT工作的所有文件! ;)

MSDN说如果出现以下情况,您将收到System.ArgumentException

您从CommonFileQuery枚举中为不是库文件夹的文件夹指定了DefaultQuery以外的值。

https://msdn.microsoft.com/en-us/library/windows/apps/BR211591.aspx

那很奇怪! 看起来像GetFilesAsync方法中的错误,除了DefaultQuery之外的所有CommaonFileQuery选项。 它与DefaultQuery一起工作正常。

  var allFiles = await myFolder.GetFilesAsync(CommonFileQuery.DefaultQuery); 

希望这可以帮助!

我遇到了同样的问题,通过递归预加载文件路径来解决它:

 private static List mContentFilenames = new List(); private static void preloadContentFilenamesRecursive(StorageFolder sf) { var files = sf.GetFilesAsync().AsTask().ConfigureAwait(false).GetAwaiter().GetResult(); if (files != null) { foreach (var f in files) { mContentFilenames.Add(f.Path.Replace('\\','/')); } } var folders = sf.GetFoldersAsync().AsTask().ConfigureAwait(false).GetAwaiter().GetResult(); if (folders != null) { foreach (var f in folders) { preloadContentFilenamesRecursive(f); } } } private static void preloadContentFilenames() { if (mContentFilenames.Count > 0) return; var installed_loc = Windows.ApplicationModel.Package.Current.InstalledLocation; var content_folder = installed_loc.GetFolderAsync("Content").AsTask().ConfigureAwait(false).GetAwaiter().GetResult(); if (content_folder != null) preloadContentFilenamesRecursive(content_folder); } private static bool searchContentFilename(string name) { var v = from val in mContentFilenames where val.EndsWith(name.Replace('\\', '/')) select val; return v.Any(); } 

不知道为什么downvoted,没有其他方法来获得WP8.1中的完整文件列表。 MSFT出于某些奇怪的原因从版本到版本破坏了它的apis。 一些调用现在返回“未实现”。