读取行后尝试关闭文本文件

时间:2019-03-24 19:46:13

标签: 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(cells)
            FileClose()

3 个答案:

答案 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将为您打开和关闭文件,因此无需添加代码即可将其关闭。