以下代码可以正常使用:
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
但是,如果文件位于远程服务器上,这可能会非常慢。有没有办法更有效地做同样的事情?我也可以立刻阅读整个文件,但这也是相当低效的......
答案 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
。值得测试的是它。另一种方法是只读取文件的较大块并自行将其分成行,当您至少阅读所需内容时停止。