0

嘿,我有以下幾點:訪問音樂文件UWP -KnownFolders.MusicLibrary.GetItemsAsync()犯規返回任何

var fileList = await KnownFolders.MusicLibrary.GetItemsAsync(); 

它不返回任何文件,我在音樂文件夾中的文件。我也有:

<Capabilities> 
<Capability Name="internetClient" /> 
<Capability Name="removableStorage" /> 
<Capability Name="documentsLibrary" /> 
<Capability Name="MusicLibrary" /> 
<Capability Name="HomeGroup" /> 
<Capability Name="RemovableDevices" /> 

我不知道爲什麼它不返回任何文件/異常?有什麼建議麼 ?我也試過FolderPicker獲取文件夾中的所有文件,但結果相同。

+1

儘管您可能有權訪問MusicLibrary,但其中的文件可能已隱藏。你可以嘗試在庫中創建一個文件,然後再次運行'GetItemsAsync()'來查看你創建的文件是否存在? – Laith

回答

3

形成您發佈的代碼,看起來您正在使用錯誤的功能。

musicLibrary能力必須包括UAP命名空間,如下圖所示,當你在你的應用程序的軟件包清單申報。

<Capabilities><uap:Capability Name="musicLibrary"/></Capabilities> 

欲瞭解更多信息,請參閱App capability declarations

所以,你可以CHANE你Package.appxmanifest類似如下:

<Capabilities> 
    <Capability Name="internetClient" /> 
    <uap:Capability Name="removableStorage" /> 
    <uap:Capability Name="musicLibrary" /> 
    <uap:Capability Name="documentsLibrary" /> 
</Capabilities> 

然後你應該能夠得到音樂庫中的文件和子文件夾。

var fileList = await KnownFolders.MusicLibrary.GetItemsAsync(); 
if (fileList.Count > 0) 
{ 
    foreach (var item in fileList) 
    { 
     Debug.WriteLine(item.Name); 
    } 
} 

音樂庫通常具有以下路徑。

%USERPROFILE%\Music 

您可以檢查您是否有該路徑下的文件。你也可以用下面的代碼檢查路徑。

var musicLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Music); 
Debug.WriteLine(musicLibrary.SaveFolder.Path); 

這將輸出已知的文件夾,這是在新的文件默認保存在庫中的文件夾的路徑。欲瞭解更多信息,請參閱this answer

+0

謝謝,我在組件中添加了uap(必須找出你必須在每個功能之後保存和構建,否則如果你重新編譯它會重新編輯你所編輯的內容),我試過了。所以它真的很有趣,fileList沒有任何東西鼠標懸停並在調試時檢查它,但在循環中顯示有文件?先生,這是什麼魔法? –

+1

@ChrisTanev這是因爲'fileList'不是一個託管對象,並且默認情況下,UWP項目的**調試器類型**是「**僅託管**」。所以你不能在調試的時候檢查它。您可以嘗試將[** Debugger type **]更改爲[** Mixed(Managed and Native)**],如[截屏](https://i.stack.imgur.com/XzbZ1.png)中的檢查。 –

+0

左鳴謝謝!現在唯一的問題是,我刪除的組件有時會自動添加到清單中,所以我必須再次刪除它們並構建proj。有什麼想法嗎 ? –