2013-10-30 30 views
1

我有一个简单的应用程序枚举的Windows Media Player播放列表。它只是让名称为每个播放列表,并将其打印到控制台:IWMPPlaylistArray.Item(指数)抛出IO异常在Windows 8.1

class Program 
{ 
    static void Main(string[] args) 
    { 
     var mediaPlayer = new WindowsMediaPlayer { uiMode = "invisible" }; 
     var allPlaylists = mediaPlayer.playlistCollection.getAll(); 

     Console.WriteLine("Found {0} wmp playlists"); 
     for (int i = 0; i < allPlaylists.count; i++) 
     { 
      try 
      { 
       IWMPPlaylist wmpPlaylist = allPlaylists.Item(i); //Exception here! 
       Console.WriteLine("Playlist with index {0} has name '{1}'", i, wmpPlaylist.name); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine("Failed to get playlist with index {0} with error '{1}'", i, e.Message); 
      } 
     } 

     Console.ReadLine(); 
    } 
} 

它适用于Windows 8的不错,但在试图获得来自IWMPPlaylistArray收集的播放列表项抛出异常的Windows8.1:

System.IO.DirectoryNotFoundException被抓获 的HResult = -2147024893 消息=该系统找不到指定的路径。 (从HRESULT异常:0x80070003) 源= WMP_POC 堆栈跟踪: 在WMPLib.IWMPPlaylistArray.Item(的Int32 LINDEX) 在WMP_POC.Program.Main(字串[] args)在 的InnerException:

而且能正常工作即使在Windows 8.1中但预定播放像“所有的音乐”,“所有影片”的例外是发生用户创建的播放列表。

请帮忙!

+0

我看到它。没有旋钮,你可以调整,捕捉并继续你的生活。如果您无法忍受它,请致电Microsoft支持部门。 –

+0

我已经发布的问题在MSDN支持论坛 - http://social.msdn.microsoft.com/Forums/ru-RU/365e7437-4f25-43f6-b242-1981f1d3cf3d/iwmpplaylistarrayitemindex-throws-io-exception-on-windows -81?论坛= fordesktopru。但现在没有答案。 –

回答

2

我调查得更深入,我发现应该位于“C:\ Users [用户名] \ AppData \ Local \ Microsoft \ Media Player \ Sync播放列表\ zh-CN \ 00057566”中的“All Music”播放列表“在Windows 8.1上不存在,而在Windows 8上存在。这似乎是问题的根源。

正如我在Windows 8.1只为预定播放列表,并在一天结束时存在的问题已经提到的,我发现了以下解决方法是似乎是工作在Windows 8.1。如果你想获得“所有音乐”播放列表只需使用下面的代码:

IWMPPlaylist allMusicPlaylist = mediaPlayer.mediaCollection.getByAttribute("MediaType", "Audio"); 

通过改变“的MediaType”属性根据the table on the msdn就可以得到“所有视频”,“所有图片”等预定义的播放列表。