myHTTPResponseStream = myWebResponse.GetResponseStream;

  //Создать локальный файл, в который необходимо направить поток ответа

  myFileStream = System.IO.File.OpenWrite(filenameWhereTo);

  //Этот размер буфера является настраиваемым

  const int buffer_length = 4000;

  byte [] byteBuffer = new byte[buffer_length];

  int bytesIn;

  //Считать файл и направить поток данных в локальный файл

  do {

   //Считать данные

   bytesIn = myHTTPResponseStream.Read(byteBuffer, 0, buffer_length);

   //Записать данные

   if (bytesIn != 0) {

    myFileStream.Write(byteBuffer, 0, bytesIn);

   }

  } while (bytesIn != 0);

 } catch (Exception myException) //Сбой при загрузке!

 {

  //Что-то случилось. Освободить ресурс

  attemptCleanup_ThrowNoExceptions(myFileStream, myHTTPResponseStream, myWebResponse);

  //Теперь, когда ресурс освобожден, повторно сгенерируем исключение,

  //чтобы сообщить приложению о том, что произошел сбой!

  throw myException;

 }

 //Загрузка прошла успешно!

 //Закрыть все ресурсы

 try {

  //Стандартная процедура закрытия ресурсов

  myFileStream.Close;

  myFileStream = null;

  myHTTPResponseStream.Close;

  myHTTPResponseStream = null;

  myWebResponse.Close;

  myWebResponse = null;

 } catch (Exception myException) //Сбой в процессе закрытия ресурса!

 {

  //Что-то случилось. Освободить ресурс

  attemptCleanup_ThrowNoExceptions(myFileStream, myHTTPResponseStream, myWebResponse);

  //Теперь, когда ресурс освобожден, повторно сгенерируем исключение,

  //чтобы сообщить приложению о том, что произошел сбой!

  throw myException;

 }

 //Успешное выполнение!

}

//----------------------------------------------

//Пытается закрыть и освободить все объекты

//Перехватывает любое вырабатываемое исключение.

//----------------------------------------------

void attemptCleanup_ThrowNoExceptions(

 System.IO.FileStream myFileStream,

 System.IO.Stream myHTTPResponseStream,

 System.Net.WebResponse myWebResponse) {

 if (myFileStream != null) {

  try {

   myFileStream.Close;

  } catch {} //He выполнять никаких действий.

 }

 if (myHTTPResponseStream != null) {

  try {

   myHTTPResponseStream.Close;

  } catch {} //He выполнять никаких действий.

 }

 if (myWebResponse != null) {

  try {

   myWebResponse.Close;

  } catch {} //He выполнять никаких действий.

 }

} //конец функции

При работе с неоднородными сетевыми топологиями могут возникать трудности
Перейти на страницу:

Похожие книги