IndexOutOfRange异常

时间:2014-03-18 18:20:13

标签: c# arrays exception exception-handling file.readalllines

为什么这会产生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);
}

4 个答案:

答案 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);
            }
        }