Читаем Программирование мобильных устройств на платформе .NET Compact Framework полностью

  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 выполнять никаких действий.

 }

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

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

Перейти на страницу:

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

Программист-прагматик. Путь от подмастерья к мастеру
Программист-прагматик. Путь от подмастерья к мастеру

Находясь на переднем крае программирования, книга "Программист-прагматик. Путь от подмастерья к мастеру" абстрагируется от всевозрастающей специализации и технических тонкостей разработки программ на современном уровне, чтобы исследовать суть процесса – требования к работоспособной и поддерживаемой программе, приводящей пользователей в восторг. Книга охватывает различные темы – от личной ответственности и карьерного роста до архитектурных методик, придающих программам гибкость и простоту в адаптации и повторном использовании.Прочитав эту книгу, вы научитесь:Бороться с недостатками программного обеспечения;Избегать ловушек, связанных с дублированием знания;Создавать гибкие, динамичные и адаптируемые программы;Избегать программирования в расчете на совпадение;Защищать вашу программу при помощи контрактов, утверждений и исключений;Собирать реальные требования;Осуществлять безжалостное и эффективное тестирование;Приводить в восторг ваших пользователей;Формировать команды из программистов-прагматиков и с помощью автоматизации делать ваши разработки более точными.

Эндрю Хант , Дэвид Томас , А. Алексашин

Программирование / Книги по IT
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT