文件加载错误

问题描述:

好吧,所以我想通过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 

但是它给出了上面显示的错误 没有人知道正确的帐户格式应该是什么?

+0

我错过了一些东西......你有在编辑器中检查过的文件吗?细节[0]或细节[1]不存在,数据实际上是否以读取文件的格式存在?在你走的时候把线路打印出来,你知道它是哪一个? –

你会得到一个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) 

这是几个检查,一个或两个,我会建议实施(有更多的考虑)否则你只是盲目地信任输入值,这通常不是好习惯。