文件加载错误
问题描述:
好吧,所以我想通过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)
这是几个检查,一个或两个,我会建议实施(有更多的考虑)否则你只是盲目地信任输入值,这通常不是好习惯。
我错过了一些东西......你有在编辑器中检查过的文件吗?细节[0]或细节[1]不存在,数据实际上是否以读取文件的格式存在?在你走的时候把线路打印出来,你知道它是哪一个? –