2014-03-18 38 views
0

为什么这给出IndexOutOfRange异常?IndexOutOfRange异常

string[] achCheckStr = File.ReadAllLines("achievements.txt"); 

if (achCheckStr[0] == ach1_StillBurning) // this is where the exception occurs 
{ 
    setAchievements(1); 
} 
if (achCheckStr[1] == ach2_Faster) 
{ 
    setAchievements(2); 
} 
+3

是否验证你实际上得到使用调试器中的文件的内容? –

+0

添加此:if(achCheckStr!= null)在我之前(achCheckStr [0] == .... – mok

+0

添加一个断点并确认'achCheckStr'有数据... – sab669

回答

1

问题1:

有mightbe没有文件存在与名achievements.txt。 此声明string[] achCheckStr = File.ReadAllLines("achievements.txt");可能会返回null

解决方案1:因此在访问任何文件之前,请使用File.Exists()方法检查文件是否存在。

问题2:您的文本文件中可能没有行。

解决方案2:之前访问字符串数组,它包含线,请确保它不为空通过检查其Length

试试这个:

if(File.Exists("achievements.txt")) 
{ 
    string[] achCheckStr = File.ReadAllLines("achievements.txt"); 
    if(achCheckStr.Length > 0) 
    { 
     if (achCheckStr[0] == ach1_StillBurning) 
     { 
      setAchievements(1); 
     } 
     if (achCheckStr[1] == ach2_Faster) 
     { 
      setAchievements(2); 
     } 
    } 
} 
0

你的代码假设achCheckStr数组至少有2个元素没有首先检查有多少。如果文件存在&内容为空,则achCheckStr.Length将为0,并且IndexOutOfRangeException将在其发生的位置发生。

0

你在哪里存储“的成就。文本”?它可能在错误的地方,所以代码不会找到它。

您可以完全限定路径或将文件放在生成.exe的bin目录中。

0

这里是一种

string[] achCheckStr = File.ReadAllLines("achievements.txt"); 
     if (achCheckStr != null && achCheckStr.Any()) 
     { 

      if (achCheckStr[0] == ach1_StillBurning) // this is where the exception occurs 
      { 
       setAchievements(1); 
      } 
      if (achCheckStr[1] == ach2_Faster) 
      { 
       setAchievements(2); 
      } 
     } 
相关问题