Каковы методы, эквивалентные CopyTo() и WriteTo() в .Net Framework 3.5 и ниже?

Мне нужно использовать .NetFramework3.5 для моего приложения, но методы CopyTo() и WriteTo() недоступны в версии 3.5. каковы эквивалентные методы в 3.5?

когда я запускаю код с 3.5, он выдает следующую ошибку:

«System.IO.Stream» не содержит определения для «WriteTo», и не удалось найти метод расширения «WriteTo», принимающий первый аргумент типа «System.IO.Stream».

Вот код:

int fileId = 1;
foreach (string uri in uriList)
{

    request = (HttpWebRequest)WebRequest.Create (baseURL + uri);
    request.Headers.Add ("X", authenticateStr);
    request.Accept = "application/pdf";
    request.Method = "GET";

    webResponse = (HttpWebResponse)request.GetResponse();
    using (MemoryStream ms = new MemoryStream())
    using (FileStream outfile = new FileStream("document_", FileMode.Create)) {
        webResponse.GetResponseStream().WriteTo(ms);
        if (ms.Length > int.MaxValue) {
            throw new NotSupportedException("Cannot write a file larger than 2GB.");
        }
        outfile.Write(ms.GetBuffer(), 0, (int)ms.Length);
    }
}
Console.WriteLine("Done!");

person M.K    schedule 23.04.2013    source источник
comment
Из MSDN. Когда текущий поток открыт, этот метод эквивалентен вызову Stream.Write для базового буфера этого потока. Так что просто создайте метод расширения.   -  person weismat    schedule 23.04.2013
comment
Попробуйте найти свое решение по ссылке ниже [Link1][1] [Link2][2] [1]: stackoverflow.com/questions/3985795/ [2]: stackoverflow.com/questions/5730863/   -  person Amit    schedule 23.04.2013
comment
Как использовать метод расширения в моем коде? Теперь я использую webResponse.GetResponseStream().WriteTo(ms); какие изменения нужно внести в приведенный выше код?   -  person M.K    schedule 23.04.2013
comment
Я создал метод расширения, как использовать его в коде?   -  person M.K    schedule 23.04.2013


Ответы (2)


  1. Stream.CopyTo действительно был добавлен в .NET 4. Более ранние версии .NET отсутствует множество полезных методов, добавленных в последних версиях. В .NET 4.5 по-прежнему отсутствует множество «очевидных» методов, я предполагаю, что будущие версии будут продолжать добавлять такие помощники, если MS увидит достаточный спрос.

  2. Отсутствует Stream.WriteTo. Он существует только в некоторых подклассах (например, MemoryStream.WriteTo который существует с .NET 1.0).

(Я подозреваю, что Stream.CopyTo был добавлен как обычный MemoryStream.WriteTo, но очевидно, что использование WriteTo будет критическим изменением API, потому что, например, его отражение даст другие результаты.)

person Richard    schedule 23.04.2013

Если вам нужно для CopyTo, я использую это расширение

public static void CopyTo(this Stream input, Stream output)
{
   // This method exists only in .NET 4 and higher

   byte[] buffer = new byte[4 * 1024];
   int bytesRead;

   while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
   {
      output.Write(buffer, 0, bytesRead);
   }
}
person Milan Matějka    schedule 13.03.2014