2011-08-13 40 views
0

さて、私は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]のいずれかが存在しません。ファイルを読み込むときにデータが実際にその形式に存在しますか?どのようなものなのかわかるように、行を印刷するのはどうですか? –

答えて

2

あなたは、detailsには1つのエントリしかないことを示唆するIndexOutOfRangeExceptionがあります。つまり、その行にタブがないことを意味します。

の行を印刷してに分割する前に、問題の原因となっている行を確認することをお勧めします。あるいは条件付きで行うこともできます:

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]); 
    } 
} 
0

これは、入力から分割する行に要求された要素が含まれていないために発生しています。

.NETがSplitを処理する方法のため、配列の最初の(読み取り:0番目)要素が問題の原因であるとは考えられません。

入力ファイルに空白行がないことを確認しましたか? 1つの空白行(ファイルの最後でさえ)がこの問題の原因になります。

あなたは、このような...

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

または

if(details.Length > 1) 

として追加することができ、複数のチェックがいずれかまたは両方私は実装をお勧めします(検討する以上はある)、これらはいくつかのチェックされているがありますそれ以外の場合は、入力値を盲目的に信頼しているだけであり、一般的には良い習慣ではありません。