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

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

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

'----------------------------------------------------------
'Осуществляет синхронную загрузку файла с Web-сервера
'и сохраняет его в локальной файловой системе
'[in] httpWhereFrom: URL-адрес файла
' (например, "http://someserver/somefile.jpg")
'[in] filenameWhereTo: Место, куда необходимо записать файл
' (например, "localfile.jpg")
'----------------------------------------------------------
Public Sub downloadFileToLocalStore(ByVal httpWhereFrom As _
 String, ByVal filenameWhereTo As String)
 Dim myFileStream As System.IO.FileStream = Nothing
 Dim myHTTPResponseStream As System.IO.Stream = Nothing
 Dim myWebRequest As System.Net.WebRequest = Nothing
 Dim myWebResponse As System.Net.WebResponse = Nothing
 'Если файл, который мы хотим записать, уже существует, удалить его
 If (System.IO.File.Exists(filenameWhereTo) = True) Then
  System.IO.File.Delete(filenameWhereTo)
 End If
 Try
  'Создать Web-запрос
  myWebRequest = _
   System.Net.HttpWebRequest.Create(httpWhereFrom)
  'Получить ответ
  myWebResponse = myWebRequest.GetResponse()
  'Получить поток для ответа
  myHTTPResponseStream = myWebResponse.GetResponseStream()
  'Создать локальный файл, в который необходимо направить поток ответа
  myFileStream = System.IO.File.OpenWrite(filenameWhereTo)
  'Этот размер буфера является настраиваемым
  Const buffer_length As Integer = 4000
  Dim byteBuffer() As Byte
  ReDim byteBuffer(buffer_length)
  Dim bytesIn As Integer
  'Считать файл и направить поток данных в локальный файл
  Do
   'Считать данные
   bytesIn = myHTTPResponseStream.Read(byteBuffer, _
    0, buffer_length)
   'Записать данные
   If (bytesIn <> 0) Then
    myFileStream.Write(byteBuffer, 0, bytesIn)
   End If
  Loop While (bytesIn <> 0)
 Catch myException As Exception 'Сбой при загрузке!
  'Что-то случилось. Освободить ресурс
  attemptCleanup ThrowNoExceptions(myFileStream, _
   myHTTPResponseStream, myWebResponse)
  'Теперь, когда ресурс освобожден, повторно сгенерируем исключение,
  'чтобы сообщить приложению о том, что произошел сбой!
  Throw myException
 End Try
 'Загрузка прошла успешно!
 'Закрыть все ресурсы.
 Try
  'Стандартная процедура закрытия ресурсов.
  myFileStream.Close()
  myFileStream = Nothing
  myHTTPResponseStream.Close()
  myHTTPResponseStream = Nothing
  myWebResponse.Close()
  myWebResponse = Nothing
 Catch myException As Exception 'Сбой в процессе закрытия ресурса!
  'Что-то случилось. Освободить ресурс
  attemptCleanup_ThrowNoExceptions(myFileStream, _
   myHTTPResponseStream, myWebResponse)
  'Теперь, когда ресурс освобожден, повторно сгенерируем исключение,
  'чтобы сообщить приложению о том, что произошел сбой!
  Throw myException
 End Try
 'Успешное выполнение!
End Sub
'----------------------------------------------
'Пытается закрыть и освободить все объекты
'Перехватывает любое вырабатываемое исключение.
'----------------------------------------------
Sub attemptCleanup_ThrowNoExceptions( _
 ByVal myFileStream As System.10.FileStream, _
 ByVal myHTTPResponseStream As System.IO.Stream, _
 ByVal myWebResponse As System.Net.WebResponse)
 If Not (myFileStream Is Nothing) Then
  Try
   myFileStream.Сlose()
  Catch 'He выполнять никаких действий.
  End Try
 End If
 If Not (myHTTPResponseStream Is Nothing) Then
  Try
   myHTTPResponseStream.Close()
  Catch 'He выполнять никаких действий.
  End Try
 End If
 If Not (myWebResponse Is Nothing) Then
 Try
  myWebResponse.Close()
 Catch 'He выполнять никаких действий.
 End Try
End If
End Sub

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


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