Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как узнать размер файла в Internet путем API? Добавлено: 11.08.05 10:14  

Автор вопроса:  Александр | ICQ: 204034 
Вот код (но он не работает):

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
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #1
Добавлено: 11.08.05 10:57
используй WinSock API, формируй запрос, получай ответ... Пусть сервер те возвращает размер а не InetApi

Ответить

Номер ответа: 2
Автор ответа:
 DaSharm



ICQ: 780477 

Вопросов: 72
Ответов: 1297
 Web-сайт: dasharm.com
 Профиль | | #2
Добавлено: 11.08.05 19:18

InternetQueryDataAvailable возвращает количество байт, которое может быть прочитано "в один заход" используя функцию InternetReadFile и подобные...Попробуй выполнять InternetSetFilePointer до тех пор, пока InternetQueryDataAvailable не возвратит ошибку.

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 11.08.05 21:55
Посылай HTTP-запрос типа HEAD и обрабатывай Content-lenght. Ну если ответ chunked, то быстро, наверно, нельзя.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам