下面的代码有效,但每次都会抛出一个异常消息框。消息框显示“索引超出了数组的范围”。我想不看邮箱,但我也想没有空的异常捕获。我做错了什么?
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);
}
}
}
}
================================== UPDATE ============ ============================== 在阅读并向我的PSL代码添加后,我最终得到了一个新的异常(引用的对象未设置为对象的实例。
这是我的新代码。我改为while循环寻找null并在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);
}
}
}
}
答案 0 :(得分:1)
似乎数组lines
没有3个元素。不要尝试访问大于或等于数组长度的数组索引。
答案 1 :(得分:1)
你在这个地方做错了。
string[] lines = sr.ReadLine().Split(new Char [] { '\t' }, StringSplitOptions.None);
string one = lines[0];
string two = lines[1];
string three = lines[2];
甚至没有检查length
的{{1}}你试图从中提取物品。这必须是您收到错误的地方。如果您正在阅读的行中少于2 lines array
,该怎么办?这将失败\t
。
相反,你可以做的是
Index out of bounds