Vb.net 尝试在读取行后关闭文本文件
我试图将文本文件第二行的数据输出到datagridview,但这样做时,它也会输出第二行之后的每一行。这就是我尝试过的。谢谢Vb.net 尝试在读取行后关闭文本文件,vb.net,Vb.net,我试图将文本文件第二行的数据输出到datagridview,但这样做时,它也会输出第二行之后的每一行。这就是我尝试过的。谢谢 Dim lines = IO.File.ReadAllLines(OrderID & ".txt") For index = 1 To lines.Length - 1 Dim cells = lines(index).Split(","c) dgvOutput.Rows.Add(ce
Dim lines = IO.File.ReadAllLines(OrderID & ".txt")
For index = 1 To lines.Length - 1
Dim cells = lines(index).Split(","c)
dgvOutput.Rows.Add(cells)
FileClose()
循环在所有行上执行,只跳过第一行。
虽然我看不到FileClose调用中发生了什么,但似乎没有任何意义,因为ReadAllLines已经关闭了该文件 您可以用一行代码获得文件的第二行
Dim line as String = File.ReadLines(OrderID & ".txt").Skip(1).Take(1).FirstOrDefault()
' this check is required to avoid problems with files containing 0 or 1 line
if line IsNot Nothing Then
Dim cells = line.Split(","c)
dgvOutput.Rows.Add(cells)
End If
请注意,我已将ReadAllLines替换为ReadLines。这是更好的,因为当您只需要第二行(如果存在)时,使用此方法不会读取所有行。更多信息,在第二行之后,它将输出每一行,因为当您遍历ReadAllLines返回的字符串数组时,您会告诉它这样做 IO.File.ReadAllLines不会使输出流保持打开状态。文件已关闭。它所做的是返回一个文件内容的零基(默认)数组,其中换行符是分割的分隔符 要使用ReadAllLines获取第二行的内容,您需要:
Dim lines = IO.File.ReadAllLines(OrderID & ".txt")
If lines.length >= 2 Then
Dim cells = lines(1).Split(","c)
dgvOutput.Rows.Add(cells)
End If
现在,这确实有读取整个文件的开销。如果使用reader对象打开文件,则只需读取文件的第一行和第二行即可获得第二行
可能是这样的:
Dim reader as StreamReader = My.Computer.FileSystem.OpenTextFileReader(OrderId & ".txt")
Dim a as String
' This reads the first line, which we throw away
reader.ReadLine()
a = reader.ReadLine()
reader.Close()
Dim cells = a.Split(","c)
dgvOutput.Rows.Add(cells)
您需要测试您的明确环境,以确定哪一个更适合您正在尝试做的事情
Dim lines = IO.File.ReadAllLines(OrderID & ".txt")
Dim SecondLine = lines(1)
File.ReadAllLines为您打开和关闭文件,因此无需添加代码来关闭它。下一个
在哪里?请提供一个最小的、完整的、可验证的例子。请你解释一下这个问题与你之前的问题有什么不同。您想读取从第二行开始的所有行还是仅从第二行开始的所有行?一个小问题:当您调用Take(1)
时,将不会有多行,因此SingleOrDefault
将比FirstOrDefault
更合适。