powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не записывается файл функцией InternetWriteFile
11 сообщений из 11, страница 1 из 1
Не записывается файл функцией InternetWriteFile
    #36718201
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые товарищи!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
' Пытаюсь писать файл на сервер (пишу через HTTP-прокси)
Public Declare Function HttpSendRequestEx Lib "wininet.dll" Alias "HttpSendRequestExA" ( _
                ByVal hRequest As Long, ByRef lpBuffersIn As INTERNET_BUFFERS, _
                ByRef lpBuffersOut As INTERNET_BUFFERS, _
                ByVal dwFlags As Long, ByVal dwContext As Long) As Long
... 'Открываю запрос
hReq = HttpOpenRequest(hConnection, "POST", strURL, vbNullString, vbNullString, _
                                    0 &, INTERNET_FLAG_NO_CACHE_WRITE,  0 )
'    Отправляю запрос
iReq = HttpSendRequest(hReq, vbNullString,  0 , vbNullString,  0 )
'    Читаю файл в текстовую переменную
Open "c:\text.ext" For Binary Access Read As # 71 : fLen = LOF( 71 ): sFile = InputB(fLen, # 71 )
Close # 71 
'    Заполняю структуру (изъято из примера на С++)
    BufferIn.dwStructSize = Len(BufferIn)   '; // Must be set or error will occur
    BufferIn.Next =  0 & 'Null ';
    BufferIn.lpcszHeader =  0 & 'Null ';
    BufferIn.dwHeadersLength =  0  ';
    BufferIn.dwHeadersTotal =  0  ';
    BufferIn.lpvBuffer =  0 & 'Null ';
    BufferIn.dwBufferLength =  0  ';
    BufferIn.dwBufferTotal = fLen '; // This is the only member used other than dwStructSize
    BufferIn.dwOffsetLow =  0  ';
    BufferIn.dwOffsetHigh =  0  ';
 '   Отправляю расширение запроса
LRet = HttpSendRequestEx(hReq, BufferIn, BufferOut,  0 ,  0 ) 'Null, 0, 0)
'  Пишу файл пакетами по 2К 
i =  0 
Do
    i = i +  1 :   pos =  2048  * (i -  1 ) +  1 
    If fLen - pos >  2048  Then sBuffer = Mid(sFile, pos,  2048 ) Else sBuffer = Mid(sFile, pos)
    iRet = InternetWriteFile(hReq, sBuffer, Len(sBuffer), dwBytesWritten)
    If iRet =  0  Then
        ErrorOut Err.LastDllError, "InternetWriteFile"
        GoTo  89 
    End If
    If Not fLen - pos >  2048  Then Exit Do
Loop
... и получаю ошибку 12019 - The hendle is in the wrong state for the requested operation.
То же самое, если читаю файл пакетами в массив типа Байт (с соответствующей переделкой объявления функции):
Код: plaintext
1.
2.
3.
4.
Dim dBuffer As Long, pBuffer() As Byte
dBuffer =  2048 : ReDim pBuffer( 1  To dBuffer)
'...
    Get # 71 , , pBuffer
    iRet = InternetWriteFile(hReq, pBuffer( 1 ), dBuffer, dwBytesWritten)
Но, если в обращении
Код: plaintext
LRet = HttpSendRequestEx(hReq, BufferIn,  0 ,  0 ,  0 ) 
убрать приемный буфер ( с переделкой описания функции) , то первые 2К из файла записываются без ошибки, а на втором вызове InternetWriteFile сервер отвечает:
12030 - Тhe conntction with the server was tarmenated abnormally.
Может подскажите что-нибудь на свежую голову ... Заранее благодарен.
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36718213
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
объект ServerXMLHTTP попробуйте. а то вы всё с API что-то мудрите.
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36718219
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, но мне нужно это внедрить в модуль на VBA в среде Аксесса и не хочется добавлять дополнительные ресурсы, и так хлопот хватает ... Чтение файла освоено и через HTTP и напрямую по FTP (здесь и запись файла освоена). А вот попадаются HTTP-прокси и их нужно "добить".
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36718226
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не понимаю в чём у вас проблема? вам жалко ссылку на бибилиотеку добавить, если так, то юзайте через CreateObject() - ваше право, хоть и не понятно зачем
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36718279
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Моя база написана под Аксесс и ведется в версиях от 97 до 2007. Хорошо, что еще файлы от Аксесса 2000 обрабатываются всеми последующими. Когда база под Аксессом работает на нескольких сотнях машин, а на всех машинах Аксессы разные (а "админы" то и дело меняют их: "У нас отформатировали диск и переустановили Видоус" ... вот ответик) и иногда бывает, что не хватает то той ссылки то другой, - стараюсь обойтись минимальными ресурсами, которые уже задействованы в базе... Вот такая причина.
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36718292
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь СМоя база написана под Аксесс и ведется в версиях от 97 до 2007. Хорошо, что еще файлы от Аксесса 2000 обрабатываются всеми последующими. Когда база под Аксессом работает на нескольких сотнях машин, а на всех машинах Аксессы разные (а "админы" то и дело меняют их: "У нас отформатировали диск и переустановили Видоус" ... вот ответик) и иногда бывает, что не хватает то той ссылки то другой, - стараюсь обойтись минимальными ресурсами, которые уже задействованы в базе... Вот такая причина.

и что? ServerXMLHTTP всегда есть, если боитесь , что не будет или не та версия, то можете обработать ошибку создания объекта. вообще не понимаю , что вы так боитесь юзать стандартные средства, но зато лезете в дебри API, которое как раз сильно иногда отличается в разных версиях ОС
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36718533
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ФТП он поддерживает?
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36719453
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь СА ФТП он поддерживает?

reliability
The HTTP client stack offers longer uptimes. WinInet features that are not critical for server applications, such as URL caching, auto-discovery of proxy servers, HTTP/1.1 chunking, offline support, and support for Gopher and FTP (File Transfer Protocol) protocols are not included in the new HTTP subset.
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36719456
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneИгорь СА ФТП он поддерживает?

reliability
The HTTP client stack offers longer uptimes. WinInet features that are not critical for server applications, such as URL caching, auto-discovery of proxy servers, HTTP/1.1 chunking, offline support, and support for Gopher and FTP (File Transfer Protocol) protocols are not included in the new HTTP subset.
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36719629
Игорь С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
С чего начать его изучение? Если можно укажите пару источников.
Т.е. я понял, что ФТП доступ осуществляю через WinInet, а HTTP - через этот "Server"?
...
Рейтинг: 0 / 0
Не записывается файл функцией InternetWriteFile
    #36719649
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ССпасибо!
С чего начать его изучение? Если можно укажите пару источников.
Т.е. я понял, что ФТП доступ осуществляю через WinInet, а HTTP - через этот "Server"?


MSXML скачайте SDK, с ним хэлп идёт. или MSDN смотрите
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Не записывается файл функцией InternetWriteFile
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]