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

Листинг 15.11. Код для загрузки файла с Web-сервера

Листинг 15.11. Код для загрузки файла с Web-сервера

//-----------------------------------------------------------
//Осуществляет синхронную загрузку файла с Web-сервера
//и сохраняет его в локальной файловой системе
// [in] httpWhereFrom: URL-адрес файла
// (например, "http://someserver/somefile.jpg")
// [in] filenameWhereTo: Место, куда необходимо записать файл
// (например, "localfile.jpg")
//-----------------------------------------------------------
public void downloadFileToLocalStore(string httpWhereFrom, string filenameWhereTo) {
 System.IO.FileStream myFileStream = null;
 System.IO.Stream myHTTPResponseStream = null;
 System.Net.WebRequest myWebRequest = null;
 System.Net.WebResponse myWebResponse = null;
 //Если файл, который мы хотим записать, уже существует, удалить его
 if (System.IO.File.Exists(filenameWhereTo) == true) {
  System.IO.File.Delete(filenameWhereTo);
 }
 try {
  //Создать Web-запрос
  myWebRequest = System.Net.HttpWebRequest.Create(httpWhereFrom);
  //Получить ответ
  myWebResponse = myWebRequest.GetResponse();
  //Получить поток для ответа
  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 выполнять никаких действий.
 }
} //конец функции

Оглавление книги


Генерация: 0.052. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз