以下のコードは機能しますが、毎回例外メッセージ ボックスがスローされます。メッセージ ボックスには、「インデックスが配列の範囲外でした」と表示されます。メッセージボックスを表示したくないのですが、空の例外をキャッチしたくありません。私は何を間違えましたか?
private void btnReadFile_Click(object sender, EventArgs e)
{
Stream myStream;
OpenFileDialog oFD = new OpenFileDialog();
if (oFD.ShowDialog() == DialogResult.OK)
{
if ((myStream = oFD.OpenFile()) != null)
{
try
{
StreamReader sr = new StreamReader(myStream);
while (sr.Peek() >=0)
{
for (int i = 0; i < myStream.Length; i++)
{
string[] lines = sr.ReadLine().Split(new Char [] { '\t' }, StringSplitOptions.None);
string one = lines[0];
string two = lines[1];
string three = lines[2];
ListViewItem item = new ListViewItem(new string[] { one, two, three });
lvRollResults.Items.Add(item);
}
}
sr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
==================================更新=============== =========================== PSL のコードを読んで私のコードに追加した後、新しい例外が発生しました (参照されるオブジェクトがオブジェクトのインスタンス。
これが私の新しいコードです。null を探す while ループに変更し、while ループ内に reaLine() を追加しました。このコードは、例外なく動作するようになりました。
private void btnReadFile_Click(object sender, EventArgs e)
{
Stream myStream;
OpenFileDialog oFD = new OpenFileDialog();
if (oFD.ShowDialog() == DialogResult.OK)
{
if ((myStream = oFD.OpenFile()) != null)
{
try
{
StreamReader sr = new StreamReader(myStream);
while ((sr.ReadLine()) != null)//if line is null stop reading
{
string[] lines = sr.ReadLine().Split(new Char[] { '\t' }, StringSplitOptions.None);
string one = lines[0];
string two = string.Empty;
string three = string.Empty;
if (lines.Length > 1)
two = lines[1];
if (lines.Length > 2)
three = lines[2];
ListViewItem item = new ListViewItem(new string[] { one, two, three });
lvRollResults.Items.Add(item);
sr.ReadLine();//read a line to see if it is null
}
sr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}