如何在vb.net中选择要读取的特定行?

如何在vb.net中选择要读取的特定行?,vb.net,streamreader,Vb.net,Streamreader,我想知道是否/如何使用system.io.streamreader读取vb.net中的特定行 Dim streamreader as system.io.streamreader streamreader.selectline(linenumber as int).read streamreader.close() 这是可能的还是有一个类似于此的函数?我会使用文件。ReadAllLines将行读入数组,然后使用数组选择行 Dim allLines As String() = File.Read

我想知道是否/如何使用system.io.streamreader读取vb.net中的特定行

Dim streamreader as system.io.streamreader
streamreader.selectline(linenumber as int).read
streamreader.close()

这是可能的还是有一个类似于此的函数?

我会使用
文件。ReadAllLines
将行读入数组,然后使用数组选择行

Dim allLines As String() = File.ReadAllLines(filePath)
Dim lineTwo As String = allLines(1) '0-based index

请注意,
ReadAllLines
会将整个文本文件读入内存,但我认为这不是问题,因为如果是,我建议您采用另一种方法尝试跳转到特定行。

ReadLines
速度非常快,因为它不会在内存中加载所有内容。它返回一个
IEnumerable
,允许您轻松跳到一行。以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();
var数据=新字符串('A',1022);
使用(var writer=newstreamwriter(@“d:\text.txt”))
{

对于(int i=1;我不存在,通过while读取您的文件并放置计数器文本文件是流,您无法知道行的开始和结束位置,除非在到达所需行之前逐个读取它们。当您发现需要开始编写这样的代码时,很可能不应该将数据存储在文本文件中。谢谢您的帮助救命啊,我来试试。