0

为什么这是一个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

4 回答 4

1

问题1:

可能不存在 name 的文件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);
        }
    }
}
于 2014-03-18T18:24:27.860 回答
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);
            }
        }
于 2014-03-18T18:27:49.010 回答
0

您的代码假设achCheckStr数组至少有 2 个元素,而没有先检查有多少。如果文件存在且内容为空,achCheckStr.Length则为 0,并且IndexOutOfRangeException将准确地抛出它发生的位置。

于 2014-03-18T18:24:06.213 回答
0

你在哪里存储“achievements.txt”?它可能位于错误的位置,因此代码找不到它。

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

于 2014-03-18T18:24:30.803 回答