文件加载错误

时间:2011-08-13 06:31:11

标签: c# arrays indexing user-accounts

好的,所以我试图通过C#加载一堆配置文件,当我尝试启动程序时,我不断收到此错误。

C:\C#FILES>program.exe

Unhandled Exception: System.IndexOutOfRangeException: Index was outside the boun
ds of the array.
   at ConsoleApplication2.Program.loadAccounts()
   at ConsoleApplication2.Program.Main(String[] args)

C:\C#FILES>

我已经调查过,我认为它与文件中的帐户格式有关 我想知道正确的方法是什么,我已经尝试了各种我能想到的方式

这是加载帐户方法

private static void loadAccounts()
{
    using (TextReader tr = new StreamReader("accounts.txt"))
    {
        string line = null;
        while ((line = tr.ReadLine()) != null)
        {
            String[] details = line.Split('\t');
            accounts.Add(details[0] + ":" + details[1]);
        }
    }
}

accounts.txt部分是我不确定的部分,我认为它将如下 用户名(标签)的密码 像这样

username    password

然而它给出了上面显示的错误 有谁知道适当的帐户格式应该是什么?

2 个答案:

答案 0 :(得分:2)

你得到一个IndexOutOfRangeException,这表明details只有一个条目 - 这意味着该行上没有标签。

我建议您在拆分之前打印出问题的行,这样您就可以看到导致问题的行。或者可能有条件地做:

while ((line = tr.ReadLine()) != null)
{
    String[] details = line.Split('\t');
    if (details.Length == 1)
    {
        // Or log it, or whatever...
        Console.WriteLine("Input error: no tab in line '{0}'", line);
    }
    else
    {
        accounts.Add(details[0] + ":" + details[1]);
    }
}

答案 1 :(得分:0)

这是因为您从输入中分割的行不包含所请求的元素。

由于.NET处理0的方式,数组中的第一个(读取:Split)元素不太可能是导致问题的原因。

您是否检查过输入文件中是否有空行?单个空白行(即使在文件末尾)也会导致此问题。

您可以添加多项检查,例如..

if(!string.IsNullOrWhitespace(line)) ...

if(details.Length > 1)

这些是一些检查,我建议实施其中之一或两者(还有更多需要考虑的因素),否则你只是盲目地信任输入值,这不是一般的好习惯。