我想知道是否/如何使用system.io.streamreader读取vb.net中的特定行。
Dim streamreader as system.io.streamreader
streamreader.selectline(linenumber as int).read
streamreader.close()
这是可能的,还是有类似的功能?
答案 0 :(得分:1)
我使用File.ReadAllLines
将行读入数组,然后只使用数组来选择行。
Dim allLines As String() = File.ReadAllLines(filePath)
Dim lineTwo As String = allLines(1) '0-based index
请注意,ReadAllLines
会将整个文本文件读入内存,但我认为这不是问题,因为如果是,那么我建议您采取其他方法尝试跳转到特定行
答案 1 :(得分:0)
ReadLines
非常快,因为它不会将所有内容加载到内存中。它返回一个IEnumerable<string>
,可以让您轻松跳到一行。拿这个5GB文件:
var data = new string('A', 1022);
using (var writer = new StreamWriter(@"d:\text.txt"))
{
for (int i = 1; i <= 1024 * 1024 * 5; i++)
{
writer.WriteLine("{0} {1}", i, data);
}
}
var watch = Stopwatch.StartNew();
var line = File.ReadLines(@"d:\text.txt").Skip(704320).Take(1).FirstOrDefault();
watch.Stop();
Console.WriteLine("Elapsed time: {0}", watch.Elapsed); // Elapsed time: 00:00:02.0507396
Console.WriteLine(line); // 704320 AAAAAA...
Console.ReadLine();