2015-10-26 3 views
1

У меня есть Filestream и я читаю большой Файл.Ограничитель Filestream и CRLF?

Разделитель CRLF, и я хочу прочитать только до CRLF.

Как это сделать с помощью Filestream? Есть Filestream даже правильный выбор?

Я НЕ интересен в readallLines или аналогичных методах, где вы должны загрузить весь файл в память.

Главным приоритетом является эффективность памяти.

+1

'File.ReadLines()' не читает весь файл и так 'File.ReadLines (@ 'C: \ MyFile.txt'). Возьмем (1) 'может быть решением; (обратите внимание на разницу между 'ReadAllLines' и' ReadLines') –

ответ

1

Вы замечаете, что проблема сильно изменилась; поэтому у вас есть openFileStream и вы хотите найти следующий CRLF ('\r\n'); в таком случае что-то подобное можно было бы реализовать:

private static long GetNextCRLFPosition(FileStream stream) { 
    try { 
     long savedPosition = fs.Position; 

     // ReadByte - we're working with binary file... 
     for (int item = fs.ReadByte(); item >= 0; item = fs.ReadByte()) { 
     if (item == '\r') { 
      item = fs.ReadByte(); 

      if (item == '\n') 
      return fs.Position - 2; 
      else 
      fs.Seek(-1, SeekOrigin.Current); 
     } 
     }  

     return -1; 
    } 
    finally { 
     fs.Seek(savedPosition, SeekOrigin.Begin); 
    } 
    } 

    ... 

    using (FileStream fs = new FileStream(@"C:\MyFile.Text", FileMode.Open)) { 
    ... 
    // The next "\r\n" is in shift bytes 
    long shift = GetNextCRLFPosition(fs);  
    ... 
    } 
+0

Моя проблема заключается в том, что мой так называемый двоичный файл содержит много «текста», поэтому мне нужно обмениваться между FileStream и StreamReader. если я прочитал из StreamReader 'ReadLines', я также изменил положение' FileStream'? SomeHow я не могу заставить это работать. – RayOldProf

+0

@RayOldProf StreamReader - это всего лишь слой вокруг FileStream и просто использует свойство [FileStream] Position. Поэтому их позиции связаны. – Vlad

+0

Я только что узнал, что это не так просто. 'StreamReader' использует некоторый' buffer', а его позиция не равна 'FileStream'. поэтому я не могу использовать 'StreamReader'. любая альтернатива? – RayOldProf

Смежные вопросы