2012-07-25 120 views
1

并将这些行添加到列表框中。 (Windows窗体)如何从大文件中的特定行读取特定行

我会用:

String file_name = @"x:\...."; 
int first_line = 24536; 
int last_line = 25536; 

for (int i = first_line; i <= last_line; i++) 
{ 
    this.listBox.Items.Add(File.ReadLines(this.file_name).ElementAt(i)); 
} 

但是这需要大量的时间来加载1000行。

我该如何更有效地做到这一点(更快)?

回答

8

当前你每次打电话ElementAt - 这意味着从头读取文件为每个新行。

试试这个:

string[] lines = File.ReadLines(fileName) 
        .Skip(firstLine - 1) // Assuming 1-based line numbers 
        .Take(lastLine - firstLine) 
        .ToArray(); 
listBox.Items.AddRange(lines); 

(请注意,我从你的变量名删除的非常规下划线。)

+0

附注:行号通常是基于1-index的。 :) – leppie 2012-07-25 08:30:55

+0

@leppie:好点。将修复和评论。 – 2012-07-25 08:40:08

+0

@JonSkeet谢谢。这比我预期的要快得多。 – Qsiris 2012-07-25 09:05:16

1

您可以通过文件行的列表,然后通过索引ID叫它

IEnumerable<string> = File.ReadLines(@"c:\test.txt") 
         .Take(NumberOfLines); 
+0

但这会导致读取整个文件,并使用不必要的内存。 – Qsiris 2012-07-25 09:08:45

+0

@ ovidiub13我同意请现在检查我已更正它 – HatSoft 2012-07-25 09:11:55