为什么这会产生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);
}
答案 0 :(得分:1)
问题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);
}
}
}
答案 1 :(得分:0)
您的代码假设achCheckStr
数组至少有2个元素,而不先检查有多少元素。如果文件存在&内容为空,achCheckStr.Length
将为0,IndexOutOfRangeException
将完全抛出正确的位置。
答案 2 :(得分:0)
你在哪里存储“achievement.txt”?它可能在错误的地方,因此代码找不到它。
您可以完全限定路径或将文件放在生成.exe的bin目录中。
答案 3 :(得分: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);
}
}