文件加载错误

本文关键字:错误 加载 文件 | 更新日期: 2023-09-27 18:05:42

好的,所以我试图通过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

,但是它给出了上面所示的错误有人知道正确的账户格式应该是什么吗?

文件加载错误

您将获得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]);
    }
}

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

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

你检查过你的输入文件中没有空行吗?单个空行(即使在文件末尾)也会导致此问题。

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

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

if(details.Length > 1)

这些是我建议实现的一些检查,或者两者都有(还有更多需要考虑的),否则你只是盲目地相信输入值,这通常不是好的做法。