Показать сообщение отдельно
Старый 04.07.2013, 21:51   #3
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: StreamReader Position

Не понял. Что копировать?
Вероятно я плохо объяснил.
Задача.
Прочитать построчно часть текстового файла. Именно построчно - строка за строкой. Ее (эту часть) нужно найти сначала, т.к. она может быть не с начала файла. Что-то с прочитанным сделать.
Затем прочитать так же другую часть. Эта другая часть неизвестно где - возможно до предыдущей прочитанной части. Ее (эту вторую часть) тоже нужно найти сначала. Т.е. нужно по новой с начала начать читать файл. Построчно.
Я сейчас делаю так:
byte[] buf;
using (FileStream fs = new FileStream("file.txt", FileMode.Open))
{
    buf = new byte[fs.Length];
     fs.Read(buf, 0, (int)fs.Length);
}

using (MemoryStream ms = new MemoryStream(buf))
{
    using (StreamReader sr = new StreamReader("ms"))
    {
          foreach (string data in dataArray)
          {
              sr.BaseStream.Seek(0, SeekOrigin.Begin);
              sr.DiscardBufferedData();
              _dataes.Add(data, new Data(sr, data));
          }
    }
}
В конструкторе Data ищу нужный кусок по имени (data) и читаю/парсю его во внутренние переменные класса Data.
Т.е. сначала читаю весь файл в буфер, затем из буфера делаю StreamReader и уже его использую.

Мне это не нравится. Есть ли способ нормаль менять позицию чтения в StreamReader, не сбрасывая его внутренний буфер? Или может есть способ читать из потока (MemoryStream/FileStream) по строкам (как это делает StreamReader) не городя огород со своим разбором Encoding и т.п.
(Offline)
 
Ответить с цитированием