Потоковая передача TextReader в файл

У меня есть объект TextReader.

Теперь я хочу передать все содержимое TextReader в файл. Я не могу использовать ReadToEnd() и записывать все в файл сразу, потому что содержимое может быть большого размера.

Может ли кто-нибудь дать мне образец/совет, как это сделать в блоках?


person BennoDual    schedule 12.07.2014    source источник
comment
Просто используйте ReadLine() в цикле, пока он не вернет null.   -  person Hans Passant    schedule 12.07.2014


Ответы (3)


Что-то вроде этого. Прокручивайте читатель, пока он не вернет null, и делайте свою работу. После этого закройте его.

String line;

try 
{
  line = txtrdr.ReadLine();       //call ReadLine on reader to read each line
  while (line != null)            //loop through the reader and do the write
  {
   Console.WriteLine(line);
   line = txtrdr.ReadLine();
  }
}

catch(Exception e)
{
  // Do whatever needed
}


finally 
{
  if(txtrdr != null)
   txtrdr.Close();    //close once done
}
person Rahul    schedule 12.07.2014

Используйте TextReader.ReadLine. :

// assuming stream is your TextReader
using (stream)
using (StreamWriter sw = File.CreateText(@"FileLocation"))
{
   while (!stream.EndOfStream)
   {
        var line = stream.ReadLine();
        sw.WriteLine(line);
    }
}
person Yuval Itzchakov    schedule 12.07.2014

person    schedule
comment
Я думаю, что цикл do-while был бы лучше здесь - person Yuval Itzchakov; 12.07.2014
comment
Ваш код недействителен. Вы не должны читать строку перед do, а порядок чтения и записи смешанный - person Yuval Itzchakov; 12.07.2014