Страница: 1 |
Вопрос: Как узнать размер файла в Internet путем API? | Добавлено: 11.08.05 10:14 |
Автор вопроса: ![]() |
Вот код (но он не работает):
Option Explicit Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxy As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternet As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByRef dwContext As Long) As Long Private Declare Function InternetQueryDataAvailable Lib "wininet.dll" (ByVal hFile As Long, ByRef lpdwNumberOfBytesAvailable As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal dwNumberOfBytesToRead As Long, ByRef lpdwNumberOfBytesRead As Long) As Integer Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByRef hInternet As Long) As Boolean Private Const INTERNET_OPEN_TYPE_PRECONFIG As Long = &H0 Private Const INTERNET_FLAG_EXISTING_CONNECT As Long = &H20000000 Private Sub cmdGetTags_Click() On Error Resume Next Dim hInternet As Long, hFile As Long, hFileSize As Long If Trim(txtFilePath) <> vbNullString Then ' Соединяемся с сервером hInternet = InternetOpen("VBLand.Net ICQ Bot", INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, &H0) Call LogAction("Соединились c сервером - " & Hex$(hInternet)) ' Запрашиваем нужный нам файл hFile = InternetOpenUrl(hInternet, txtFilePath.Text, vbNullString, &H0, INTERNET_FLAG_EXISTING_CONNECT, &H0) Call LogAction("Нашли файл - " & Hex$(hFile)) If hFile <> &H0 Then ' Если файл найден, то начинаем свои действия If InternetQueryDataAvailable(hFile, hFileSize, &H0, &H0) Then Call LogAction("Размер файла: " & hFileSize) End If Else ' Если файл не найден (или ошибка), то говорим об ошибке Call LogAction("Невозможно скачать файл - неверный хендл файла") End If Call InternetCloseHandle(hFile) Call InternetCloseHandle(hInternet) End If End Sub Private Sub LogAction(ByVal szLogString As String) On Error Resume Next With txtTagsInfo .Text = .Text & vbCrLf & szLogString .SelStart = Len(.Text) End With End Sub Почему неверно выдается размер файла? Например: http://localhost/Jakatta_feat._DJ_Basco_-_One_fine_day.mp3 - 7 101 092 байта, а выдается всего 794 Мне нужно узнать размер файла, затем прочитать содержимое этого файла начиная с hFileSize - 128. Если кто догадался зачем - поздравляю :) И еще - как выровнять первый столбец у ListView программно? Надо постать ему какую-то комманду - какую? |
Ответы | Всего ответов: 3 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 11.08.05 10:57 |
используй WinSock API, формируй запрос, получай ответ... Пусть сервер те возвращает размер а не InetApi |
Номер ответа: 2 Автор ответа: ![]() ![]() ICQ: 780477 Вопросов: 72 Ответов: 1297 |
Web-сайт: Профиль | Цитата | #2 | Добавлено: 11.08.05 19:18 |
InternetQueryDataAvailable возвращает количество байт, которое может быть прочитано "в один заход" используя функцию InternetReadFile и подобные...Попробуй выполнять InternetSetFilePointer до тех пор, пока InternetQueryDataAvailable не возвратит ошибку. |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Лидер форума ICQ: 216865379 Вопросов: 106 Ответов: 9979 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 11.08.05 21:55 |
Посылай HTTP-запрос типа HEAD и обрабатывай Content-lenght. Ну если ответ chunked, то быстро, наверно, нельзя. |
Страница: 1 |
|