从文本文件中读取跳过读取行的行

时间:2011-07-16 03:55:55

标签: c# stream backgroundworker

我正在逐行阅读文本文件。

StreamReader reader = new StreamReader(OpenFileDialog.OpenFile()); 

// Now I am passing this stream to backgroundworker
backgroundWorker1.DoWork += ((senderr,ee)=>
{
    while ((reader.ReadLine()) != null)
    {
        string proxy = reader.ReadLine().Split(':').GetValue(0).ToString();
        // here I am performing lengthy algo on each proxy (Takes 10 sec,s) 
    }
});
backgroundWorker1.RunWorkerAsync();

现在的问题是有些线路没有被读取。它会在读取一行后跳过每一行。

我已经使用

读取了总行数
File.ReadAllLines(file.FileName).Length

它给出准确的行数。

我怀疑我的代码中的BackgroundWorker机制存在一些问题,但无法弄明白。

4 个答案:

答案 0 :(得分:10)

while ((reader.ReadLine()) != null)中,您没有将结果分配给任何内容,因此它(将在该调用期间读取的行)将被跳过。

尝试一些变体:

string line = reader.ReadLine();
while (line != null)
{
  /* Lengthy algorithm */
  line = reader.ReadLine();
}

您可能更喜欢:

string line;
while ((line = r.ReadLine()) != null) {}

答案 1 :(得分:5)

看起来你没有在readline()调用中将行分配给变量。你在阅读冗长算法的下一行吗?

根据您的更新,这绝对是您的问题。

你有这个:

...
while ((reader.ReadLine()) != null)
{
     string proxy = reader.ReadLine().Split(':').GetValue(0).ToString();
     ...
});

你应该这样做:

...
string line;   
while ((line = reader.ReadLine()) != null)
{
    string proxy = line.Split(':').GetValue(0).ToString();
    ...
});

答案 2 :(得分:1)

在while循环reader.ReadLine()中读取一行,并在下一次读取字符串proxy = reader.ReadLine()。Split(':')。GetValue(0).ToString(); reader.ReadLine()读取下一行。您尚未将while循环中的读取行分配给任何变量。您必须对while循环中的字符串(Line)执行拆分操作。

答案 3 :(得分:0)

为什么不使用File.ReadLines(pathToFile); ?

http://msdn.microsoft.com/en-us/library/dd383503.aspx