Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

Размер файла в сети   Найти похожие ветки 

 
HF-Trade ©   (2008-04-14 02:56) [0]

Здраствуйте.
Вопросик вообщем то, наверное не новый=)
Да, видимо я туповатый=)

-
В инете обшарил гору форумов, как определить размер файла в сети, использую данную функцию(ниже), собсно почему она не арбайтен?

function GetUrlInfo(const dwInfoLevel: DWORD; const FileURL: string):
string;
var
 hSession, hFile: hInternet;
 dwBuffer: Pointer;
 dwBufferLen, dwIndex: DWORD;
begin
 Result := "";
 hSession := InternetOpen("xxx",                           INTERNET_OPEN_TYPE_PRECONFIG {PRE_CONFIG_INTERNET_ACCESS}, nil, nil, 0);
 if Assigned(hSession) then begin
   hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,
                            {INTERNET_FLAG_RELOAD}0, 0);
   dwIndex  := 0;
   dwBufferLen := 20;
   if HttpQueryInfo(hFile, dwInfoLevel, @dwBuffer, dwBufferLen, dwIndex)
     then Result := PChar(@dwBuffer);
   if Assigned(hFile) then InternetCloseHandle(hFile);
   InternetCloseHandle(hsession);
 end;
end;

.....
Для примера файл весящий 17+ мб.
(Размер файлов небольшого размера ~до 200кб определяеться нормально, но вот выше...).
......
Caption:=GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, "http://files.3dnews.ru/pub/soft/multimedia/codec/klmcodec385.exe");
......


 
<>   (2008-04-14 11:43) [1]

> dwBuffer: Pointer;

Указатель есть, а буфера нет:
http://msdn2.microsoft.com/en-us/library/aa384238(VS.85).aspx

lpvBuffer

Pointer to a buffer to receive the requested information. This parameter must not be NULL.


 
HF-Trade ©   (2008-04-14 19:02) [2]

dwBuffer: Pointer;
взято от сюда...
http://icoder.ru/pages/new1s5o497960.html


 
<>   (2008-04-14 19:25) [3]

У меня работает:

uses Wininet;

function GetUrlInfo(const dwInfoLevel: DWORD; const FileURL: string):
string;
var
   hSession, hFile: hInternet;
   dwBuffer: Pointer;
   dwBufferLen, dwIndex: DWORD;
   db:Array[1..512] of char;
begin
   dwBuffer:=@db[1];
   Result := "";
   hSession := InternetOpen(PChar(Application.Title),{INTERNET_OPEN_TYPE_PRECONFIG} PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
   if Assigned(hSession) then begin
   hFile := InternetOpenURL(hSession, PChar(FileURL), nil, 0,    {INTERNET_FLAG_RELOAD}0, 0);
   dwIndex := 0;
   dwBufferLen := 512;
   if HttpQueryInfo(hFile, dwInfoLevel, @dwBuffer, dwBufferLen, dwIndex)
   then Result := PChar(@dwBuffer);
   if Assigned(hFile) then InternetCloseHandle(hFile);
   InternetCloseHandle(hsession);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Caption:=GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, "http://files.3dnews.ru/pub/soft/multimedia/codec/klmcodec385.exe");
end;

Результат:18286263

В Интернет-Эксплорере нужно выключить автономный режим!


 
HF-Trade ©   (2008-04-14 19:57) [4]

dwBuffer: Pointer;
db:Array[1..512] of char;

мб проще -
dwBuffer:Array[0..20] of Char;

и все равно с другими ссылками траблы - например -
Caption:=GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, "http://www.gladiatorcom.nm.ru/UORecall.rar");


 
HF-Trade ©   (2008-04-14 19:59) [5]

Упс...
как получить размер файла с редиректом...
Вроде правильно сказал?=)


 
MetalFan ©   (2008-04-14 23:18) [6]

а там нет редиректа. там просто страничка с сылкой на сам файл.


 
HF-Trade ©   (2008-04-15 02:05) [7]

Ну, а как нить обойти это можно?


 
Оригинал   (2008-04-15 13:07) [8]


> HF-Trade ©   (15.04.08 02:05) [7]
> Ну, а как нить обойти это можно?


Использовать правильную ссылку?


 
HF-Trade ©   (2008-04-15 20:10) [9]

Так ссылка то прямая вроде - именно на файл.


 
<>   (2008-04-16 00:21) [10]

Нужно вставить реферер:


uses Wininet;

function GetUrlInfo(const dwInfoLevel: DWORD; const FileURL: string;head: string):
string;
var
  hSession, hFile: hInternet;
  dwBufferLen, dwIndex: DWORD;
  db:Array[1..512] of char;
begin
  Result := "";
  hSession := InternetOpen(PChar(Application.Title),{INTERNET_OPEN_TYPE_PRECONFIG} PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
  if Assigned(hSession) then begin
  hFile := InternetOpenURL(hSession, PChar(FileURL), PChar(head), Length(head),    {INTERNET_FLAG_RELOAD}0, 0);
  dwIndex := 0;
  dwBufferLen := 512;
  if HttpQueryInfo(hFile, dwInfoLevel, @db, dwBufferLen, dwIndex)
  then Result := PChar(@db);
  if Assigned(hFile) then InternetCloseHandle(hFile);
  InternetCloseHandle(hsession);
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Caption:=GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, "http://www.gladiatorcom.nm.ru/UORecall.rar",
"referer: http://www.gladiatorcom.nm.ru"+#13#10#13#10);
end;



 
ЦУП ©   (2008-04-16 02:21) [11]


> HF-Trade ©   (15.04.08 20:10) [9]
> Так ссылка то прямая вроде - именно на файл.


Какая же прямая.


 
HF-Trade ©   (2008-04-16 19:16) [12]


> <>   (16.04.08 00:21) [10]
> Нужно вставить реферер:

Огромное спасибо.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.041 c
15-1207576451
Kolan
2008-04-07 17:54
2008.05.18
Как упорядочить программы в пуске по алфавиту?


15-1207643753
samalex
2008-04-08 12:35
2008.05.18
Кодировка почтового сообщения


2-1208350194
lamponaftik
2008-04-16 16:49
2008.05.18
Need хелп=)


2-1208858129
AlexAA
2008-04-22 13:55
2008.05.18
Открыть файл .exe


11-1189391943
Grademax
2007-09-10 06:39
2008.05.18
Обработка клавиш Up, Down в ListEdit е





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский