2017-04-23 193 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