为什么会出现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);
}
问题1:
可能不存在名称为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);
}
}
}
您的代码假设achCheckStr
数组至少有2个元素,而没有首先检查有多少个元素。如果文件存在&内容为空,achCheckStr.Length
将为0,IndexOutOfRangeException
将恰好在发生的地方被抛出。
你把"achievement .txt"存放在哪里?它可能在错误的位置,所以代码无法找到它。
您可以完全限定路径或将文件放在生成.exe的bin目录中。
有个办法
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);
}
}