Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

закачка файла [WinXP]


anton773 ©   (2006-07-09 12:31:00) 

Снова здравствуйте! пытаюсь закачать файл с помощью wininet:                                                                                                      ...                                                                   Hinet:= InternetOpen('Mozilla',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
Header:= 'Accept:*/*';
HUrl:= InternetOpenUrl(Hinet,pchar(Edit1.Text),pchar(Header),StrLen(pchar(Header)),0,0) ;
 if RestartPos > 0 then InternetSetFilePointer(HUrl,RestartPos,nil,0,0);
 InternetQueryDataAvailable(HUrl,Fsize,0,0);
   while (Readlen <> 0)and (stop= false) do
   begin

  InternetReadFile(hurl,@fbuff,SizeOf(fbuff),Readlen);
  fs.WriteBuffer(fbuff,Readlen);    Application.ProcessMessages;                                                                              ...
Соединение устанавливается но закачка не начинается. PS fs это filestream


Ketmar   (2006-07-10 00:47:00) [1]

добавлю, что все возвращаемые значения надо проверять на nil. я этого не делал по прчине лени, однако сие есть неверно. %-)


anton773   (2006-07-09 15:41:00) [2]

Огромное приогромное спасибо!Работает!!!!


Ketmar   (2006-07-09 14:27:00) [3]

от это у меня отработало "на ура".
возвращаемые значения, как оказалось, тут пофигу -- главное, чтобы были не nil. %-)


{$APPTYPE CONSOLE}
uses
 Windows, SysUtils, Classes, WinInet;

var
ih, uh: HINTERNET;
hdr: string;
fs: TFileStream;
buf: packed array [0..1023] of Byte;
rd: LongWord;
begin
 ih := InternetOpen('Mozilla', PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
 hdr := 'Accept: */*';
 uh := InternetOpenUrl(ih,
   ' http://www.delphimaster.ru/cgi-bin/forum.pl?id=1152433865&n=4',
   PChar(hdr), Length(hdr), 0, 0);
 fs := TFileStream.Create('$.$', fmCreate);
 repeat
   if not InternetReadFile(uh, @buf[0], SizeOf(buf), rd) then break;
   if rd = 0 then break;
   fs.WriteBuffer(buf[0], rd);
   Write('.');
 until false;
 WriteLn;
 fs.Free();
 InternetCloseHandle(uh);
 InternetCloseHandle(ih);
end.


Ketmar   (2006-07-09 14:16:00) [4]

дык говорю же -- не знаю. щаз накидаю примерчик, проверю %-)


anton773   (2006-07-09 13:43:00) [5]


> подозрительно всё это

а каким должо быть значение Hurl


Ketmar   (2006-07-09 13:30:00) [6]

что-то мне подозрительно всё это. особенно значение HUrl. к сожалению, проверить точно я не в состоянии. %-)


anton773   (2006-07-09 13:18:00) [7]


> а OpenURL точно отрабатывает?

ставлю брейкпонт на InternetReadFile значение Hurl= $CC000C ниже привожу полный код процедуры:procedure TForm2.BitBtn1Click(Sender: TObject);
var
Hinet,HUrl: HINTERNET;
Fsize,Readlen,RestartPos: DWORD;
fbuff: array[1..1024]of Byte;
FS: TFileStream;
Header: string;
fMode: Word;

begin
RestartPos:= 0;
Fsize:= 0;
BitBtn1.Enabled:= false;
BitBtn2.Enabled:=true;
if FileExists(Edit2.Text) then
fMode:= fmOpenReadWrite else
 fMode:= fmCreate;
FS:= TFileStream.Create(Edit2.Text,fMode);
FS.Seek(FS.Size,soFromBeginning);
Hinet:= InternetOpen('Mozilla',PRE_CONFIG_INTERNET_ACCESS,nil,nil,0);
Header:= 'Accept:*/*';
HUrl:= InternetOpenUrl(Hinet,pchar(Edit1.Text),pchar(Header),StrLen(pchar(Header)),0,0) ;
 if RestartPos > 0 then InternetSetFilePointer(HUrl,RestartPos,nil,0,0);
 InternetQueryDataAvailable(HUrl,Fsize,0,0);
   while (Readlen <> 0)and (stop= false) do
   begin

  InternetReadFile(hurl,@fbuff,SizeOf(fbuff),Readlen);
  fs.WriteBuffer(fbuff,Readlen);
   Application.ProcessMessages;
  end;
  stop:= false;
  InternetCloseHandle(HUrl);
 InternetCloseHandle(Hinet);
 fs.Free;

end;


Ketmar   (2006-07-09 12:42:00) [8]

а OpenURL точно отрабатывает? не вредно бы и проверить, что оно там вернуло. а вдруг вовсе 0?


Наверх

Титульная страница Поиск, карта сайта Написать письмо