2017-04-23 114 views
0

我想要使用UWP和C#获取选定文件夹中的所有文件的列表。我需要选择一个文件夹,并显示该文件夹中的所有音频文件(包括根文件夹的子文件夹UWP C#从所选文件夹获取所有文件

我有以下代码:

 var folderPicker = new FolderPicker(); 
     folderPicker.SuggestedStartLocation = PickerLocationId.Desktop; 
     folderPicker.FileTypeFilter.Add("*"); 

     StorageFolder folder = await folderPicker.PickSingleFolderAsync(); 

     List<string> fileTypeFilter = new List<string>(); 
     fileTypeFilter.Add(".mp3"); 
     fileTypeFilter.Add(".mp3"); 
     fileTypeFilter.Add(".wma"); 
     fileTypeFilter.Add(".wav"); 
     fileTypeFilter.Add(".ogg"); 
     fileTypeFilter.Add(".flac"); 
     fileTypeFilter.Add(".aiff"); 
     fileTypeFilter.Add(".aac"); 

     QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderByDate, fileTypeFilter); 

     StorageFileQueryResult results = folder.CreateFileQueryWithOptions(queryOptions); 

     IReadOnlyList<StorageFile> sortedFiles = await results.GetFilesAsync(); 
     foreach (StorageFile item in sortedFiles) 
     { 
      AudioFilesLV.Items.Add(item.Path.ToString()); 
     } 

然而,一旦我选择我得到以下错误的文件夹:

System.ArgumentException: 'Value does not fall within the expected range.' 

我选择的文件夹中包含大约100个MP3文件

没有人有任何知道我做错了吗?

在此先感谢

回答

1

似乎是CommonFileQuery.OrderByDate的已知问题。显然你只能使用CommonFileQuery.OrderByDate和KnownFolders枚举中的文件夹。如果我改变你的代码来使用CommonFileQuery.DefaultQuery它的作品。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/f99384d9-5460-4fd4-8c70-5694e1370432/a-exception-is-happen-when-calling-getfilesasync-with-parameter-of-commonfilequeryorderbydate?forum=wpdevelop

你可以只使用一个排序依据如下,如果他们不回来的日期顺序:

foreach (StorageFile item in sortedFiles.OrderBy(a => a.DateCreated)) 
+0

安德鲁非常感谢你,这似乎为根文件夹的工作带来极大。任何想法我怎么能抓住子文件夹的列表,它会抓住的文件是这样的: +主文件夹 +子文件夹1 - SubFile1.mp3 +子文件夹2 - SubFile2.mp3 - MyFile.mp3 - MyFile2 .mp3 基本上要获取每个文件包含子文件夹文件,然后运行一个foreach?这不是太重要,但肯定会很好:) 再次感谢:) – user3733885

+0

这就是你正在进入递归的其他故事。作为一个提示,你需要看看“folder.GetFoldersAsync()”。 –

+0

非常感谢,我会仔细研究一下,就像我说那不是优先事项,我的主要任务是通过选择文件或文件夹来抓取一堆文件,所以我现在很开心,我可以继续与我的应用程序现在:D – user3733885

相关问题