Читать строку из текстового файла, пропуская прочитанные строки - PullRequest
3 голосов
/ 16 июля 2011

Я читаю из текстового файла построчно.

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 ]

10 голосов
/ 16 июля 2011

В while ((reader.ReadLine()) != null) вы не назначаете результат чему-либо, так как он (строка, которая читается во время этого вызова) будет пропущен.

Попробуйте несколько вариантов:

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

Вы можете предпочесть:

string line;
while ((line = r.ReadLine()) != null) {}
5 голосов
/ 16 июля 2011

Не похоже, что вы присваиваете строку переменной в вызове 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();
    ...
});
1 голос
/ 16 июля 2011

В читателе цикла while .ReadLine () читает строку, а в следующий раз в строке proxy = reader.ReadLine (). Split (':'). GetValue (0) .ToString (); reader.ReadLine () читает следующую строку. Вы не назначили строку чтения в цикле while ни для одной переменной. Вы должны выполнить операцию разбиения для строки (Line), считанной в цикле while.

0 голосов
/ 02 февраля 2012

Почему бы вам не использовать File.ReadLines (pathToFile);?

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

...