Книга: Программирование мобильных устройств на платформе .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
- Листинг 15.1. Простой код файлового ввода-вывода, иллюстрирующий различия между локальной и удаленной передачей данных
- Листинг 15.2. Имитация сбоев при передаче данных для тестирования приложения
- Листинг 15.3. Тестовый код, который необходимо поместить в класс формы для тестирования передачи и приема данных посредством механизма IrDA
- Листинг 15.4. Класс IrDAFileSend
- Листинг 15.5. Класс IrDAFileReceive
- Листинг 15.6. Простая Web-служба
- Листинг 15.7. Вызовы Web-служб с передачей параметров только явным образом
- Листинг 15.8. Вызов Web-служб путем неявной передачи параметров посредством cookie-файлов
- Листинг 15.9. Неэффективная организация диалога с Web-службой, в которой используется множество вызовов
- Листинг 15.10. Группирование запросов в одном вызове Web-службы
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Программный код агента
- Листинг 15.7. Вызовы Web-служб с передачей параметров только явным образом
- 1.2 Вкладка «Код счетчика»
- Запуск InterBase-сервера
- Расширенная установка InterBase-сервера
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Статистика InterBase-сервера
- Минимальный состав сервера InterBase SuperServer
- Отличительные особенности сервера Yaffil
- Эффективная работа с временными файлами сортировки
- Дополнительные национальные кодовые страницы и порядки сортировки