一次从文件中读取几行

时间:2017-05-02 10:49:58

标签: vb.net filesystems

以下代码可以正常使用:

Function ReadLines(FN As String, n As Integer) As String()
    Dim T(0 To n) As String
    With My.Computer.FileSystem.OpenTextFileReader(FN)
        For i As Integer = 0 To n
            T(i) = .ReadLine()
        Next
    End With
    Return T
End Function

但是,如果文件位于远程服务器上,这可能会非常慢。有没有办法更有效地做同样的事情?我也可以立刻阅读整个文件,但这也是相当低效的......

2 个答案:

答案 0 :(得分:1)

BufferedStream class专门用于在一系列文件中按顺序读取(或写入)文件时减少系统IO的数量。所以这有望使你的阅读更有效:

Function ReadLines(FN As String, n As Integer) As String()
    Using fs As FileStream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
        Using bs As New BufferedStream(fs)
            Using sr As New StreamReader(bs)
                Dim lines = New List(Of String)(n)
                For i As Integer = 0 To n
                    Dim line As String = sr.ReadLine()
                    If (line Is Nothing) Then
                        Exit For
                    End If
                    lines.Add(line)
                Next
                Return lines.ToArray()
            End Using
        End Using
    End Using
End Function

答案 1 :(得分:0)

File.ReadAllLines

File.ReadLines方法不同,Enumerable(Of String)不会在一次操作中读取整个文件。它将文件的内容公开为StreamReader.ReadLine,但在您使用之前不会从文件中读取任何内容。该代码必须读取您想要的最后一行,但除此之外不会读取任何内容。

说实话,我不确定它会有多快,因为它实际上可能会使用if [ $# -eq 0 ] ; then 。值得测试的是它。另一种方法是只读取文件的较大块并自行将其分成行,当您至少阅读所需内容时停止。