|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - [решено] Помогите исправить. |
|
|
VBA - [решено] Помогите исправить.
|
Пользователь Сообщения: 144 |
Профиль | Отправить PM | Цитировать В общем имеется исходники программы для вижуала и сама программа, ничего особенного в этой программе нет она просто скачивает файл и ложит его там же где и сама программа. При скачивании она жрёт столько ОЗУ сколько весит сам файл который скачивается в этом и проблема. Можно ли как-нибудь сделать так что бы файл не помещался в память а сразу же скачивался и был рядом с программой ? Подскажите в какую сторону копать ?
|
|
Отправлено: 14:56, 13-10-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата by_gangster:
|
|
Отправлено: 04:55, 06-11-2013 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать ' Получить собственно файл If PathForDownl = "" Then FlName = IO.Path.GetTempPath & IO.Path.GetFileName(fl) Else PathForDownloads = GetMaxPath(PathForDownloads) If IO.Directory.Exists(PathForDownloads) = False Then IO.Directory.CreateDirectory(PathForDownloads) End If FlName = PathForDownloads & "\" & IO.Path.GetFileName(fl) End If If IO.Path.GetFileName(FlName).Split(IO.Path.GetInvalidFileNameChars).Length > 1 Then FlName = IO.Path.GetTempPath & GetUIN() & ".tmp" End If 'Открыть файл ' Поток в файл (объявление) Dim fstr As New System.IO.FileStream(FlName, System.IO.FileMode.OpenOrCreate) Dim dnl_size As Long = 0 'Открытие потока в файл 'fstr = System.IO.File.OpenWrite(FlName) ' Получить асинхронно If WaitForDownload = False Then fstr.Close() thr = New Threading.Thread(AddressOf AsyncDownload) thr.Start(myHttpWebResponse.GetResponseStream) ' Получить синхронно Else FileDownloading = True Dim myStreamReader As New IO.BinaryReader(myHttpWebResponse.GetResponseStream) Dim all As New System.Collections.Generic.List(Of Byte) Do ' Собственно получения порции данных Dim bts() As Byte = myStreamReader.ReadBytes(BufferSize) If bts.Length = 0 Then Exit Do fstr.Seek(0, System.IO.SeekOrigin.End) For Each bytevalue As Byte In bts fstr.WriteByte(bytevalue) fstr.Seek(0, System.IO.SeekOrigin.End) dnl_size = dnl_size + 1 Next 'all.AddRange(bts) ' Вызов события Идет прием данных ReceiveProgressInvoke(dnl_size) Loop 'DownloadSuccess(all) End If ' Функция реализующая поток, который скачивайт файл порциями BufferSize Sub AsyncDownload(ByVal stream As Object) FileDownloading = True Dim myStreamReader As New IO.BinaryReader(stream) Dim all As New System.Collections.Generic.List(Of Byte) Dim fstr As New System.IO.FileStream(FlName, System.IO.FileMode.OpenOrCreate) Dim dnl_size As Long = 0 Do ' Всякие Прерывания и Паузы потока If FileDownloading = False Then DownloadCancelledInvoke() : myStreamReader.Close() : Exit Sub While DownloadPause System.Windows.Forms.Application.DoEvents() If FileDownloading = False Then DownloadCancelledInvoke() : myStreamReader.Close() : Exit Sub End While ' Собственно получения порции данных Dim bts() As Byte = myStreamReader.ReadBytes(BufferSize) If bts.Length = 0 Then Exit Do fstr.Seek(0, System.IO.SeekOrigin.End) For Each bytevalue As Byte In bts fstr.WriteByte(bytevalue) fstr.Seek(0, System.IO.SeekOrigin.End) dnl_size = dnl_size + 1 Next 'all.AddRange(bts) ' Вызов события Идет прием данных ReceiveProgressInvoke(dnl_size) Loop 'DownloadSuccess(all) End Sub |
------- Отправлено: 15:36, 06-11-2013 | #22 |
Пользователь Сообщения: 144
|
Профиль | Отправить PM | Цитировать mrcnn, Спасибо тебе огромное, побольше бы таких людей.
|
Отправлено: 00:10, 07-11-2013 | #23 |
Пользователь Сообщения: 144
|
Профиль | Отправить PM | Цитировать mrcnn,
Проблема в том что когда файл полностью скачался программа просто напросто показывает 100% и не завершает закачку. Выход только один - это закрыть программу. Пробовал раскоментить DownloadSuccess(all) тогда программа в конце просто напросто выдаёт ошибку и всё. Помогите пожалуйста. |
Отправлено: 19:19, 16-12-2013 | #24 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 02:20, 18-12-2013 | #25 |
Пользователь Сообщения: 144
|
Профиль | Отправить PM | Цитировать mrcnn, Спасибо, всё сработало. А ещё скажите как можно сделать что бы после завершения загрузки программа больше не использовала файл. Т.е просто после загрузки файл нельзя открыть (его использует программа), можно только после закрытия программы. Что можно добавить после downloadsuccess2() для закрытия файла программой ?
|
Отправлено: 14:02, 18-12-2013 | #26 |
Ветеран Сообщения: 1404
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 23:25, 18-12-2013 | #27 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ошибка - помогите исправить данную ошибку | simsa | Microsoft Windows 2000/XP | 2 | 26-11-2012 15:50 | |
C/C++ - Помогите исправить ошибки!!!!! | Nastasya | Программирование и базы данных | 2 | 23-05-2011 22:09 | |
Помогите исправить ошибку! | Guest | Хочу все знать | 1 | 15-05-2004 16:55 | |
Помогите исправить ошибку! | Guest | Сетевые технологии | 1 | 12-05-2004 10:11 |
|