2010-07-09 57 views
1

這個工程,當我只是調用函數和播放文件,但是如果我想從文件夾中選擇隨機播放它停止說「索引超出了數組的界限」。播放隨機mp3文件未知錯誤

任何人都可以發現什麼是錯的?

public void playrandomsound() 
    { 
     if (mp3 != null) 
     { 
      mp3.Dispose(); 
     } 

     var files = new DirectoryInfo(Application.StartupPath).GetFiles(".mp3"); 
     int index = new Random().Next(0, files.Length); 


     string filename = files[index].Name.ToString();  <-- App stops here 

     string tune = string.Concat(Application.StartupPath, "//", fiilename); 
     mp3 = new Audio(tune); 
     mp3.Play(); 



    } 

如果我刪除錯誤行上的「tostring」方法,它仍會給出相同的錯誤。

+0

你在使用什麼音頻庫? – ohmusama 2011-04-25 20:29:36

回答

3

就像Skurmedel說的那樣,你需要防止空的收集。但是,你遇到這個問題的原因是你的集合中永遠不會有任何.mp3文件。另一個bug在這裏:.GetFiles(".mp3")。你的意思是.GetFiles("*.mp3")

+0

+1:趕上! – Skurmedel 2010-07-09 01:21:14

1

ToString不是你的問題,你試圖訪問不存在的數組中的位置。

我不知道你的數組包含在你的測試運行中,但我看到一個可能的罪魁禍首。如果文件爲空且長度爲零,會怎麼樣;意味着沒有找到文件?您將從隨機數生成器中獲得0,並嘗試訪問空數組中的位置零。

這當然很容易通過檢查是否files.Length < 1(或files.Length == 0)和保釋如果是。