我正在尝试将文本文件第二行中的数据输出到datagridview,但是这样做时,第二行之后的每一行也会输出。这就是我尝试过的。谢谢
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()
答案 0 :(得分:1)
您的循环在所有行上执行,仅跳过第一行。
虽然我看不到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
请注意,我已经用ReadLines替换了ReadAllLines。这样比较好,因为使用此方法时,您仅需要第二行(如果存在)就不会读取所有行。有关更多信息,请访问ReadLines vs ReadAllLines
答案 1 :(得分:1)
它将输出第二行之后的每一行,因为这是您在迭代遍历ReadAllLines返回的字符串数组时要执行的操作。
IO.File.ReadAllLines不会打开输出流。该文件已关闭。它的作用是返回文件内容的从零开始(默认情况下)的数组,其中换行符是分隔符。
要使用ReadAllLines获得第二行的内容,这是您需要的:
parallel
现在,确实需要读取整个文件的开销。如果使用读取器对象打开文件,则只需读取文件的第一行和第二行即可获得第二行。
那将是这样的:
Dim lines = IO.File.ReadAllLines(OrderID & ".txt")
If lines.length >= 2 Then
Dim cells = lines(1).Split(","c)
dgvOutput.Rows.Add(cells)
End If
您需要测试您的显式情况,以确定哪种方法更适合您尝试做的事情。
答案 2 :(得分:0)
Dim lines = IO.File.ReadAllLines(OrderID & ".txt")
Dim SecondLine = lines(1)
File.ReadAllLines将为您打开和关闭文件,因此无需添加代码即可将其关闭。