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

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

Проблема со скачиванием файла, WinInet


Dima ©   (2008-04-01 12:55:00) 

Здравствуйте,

я пытаюсь скачать файл (exe, dll, zip, rar... бывает и txt) с http сервера используя WinInet.
Мой код:
function HTTP (PathToFile: string):string;
var
 hSession: HINTERNET;
 hService: HINTERNET;
 lpBuffer: array[0..1023 + 1] of Char;
 dwBytesRead: DWORD;
 FileName: string;
 SpecCharNum: Integer;
 F: TextFile;
begin
 Result:= '';
 hSession:= InternetOpen('svchost', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 try
   if Assigned(hSession) then
   begin

     FileName:= PathToFile;
     SpecCharNum:=1;
     while (SpecCharNum <> 0) do
       begin
         SpecCharNum:=pos ('/', FileName);
         if (SpecCharNum=0) then
           break;
         FileName:= copy(FileName,SpecCharNum+1,Length(FileName)-SpecCharNum+1);
       end;

     AssignFile(F, FileName);
     Rewrite(F);
     CloseFile(F);

     hService:= InternetOpenUrl(hSession, PChar(PathToFile), nil, 0, 0, 0);

     if Assigned(hService) then
       try
         while True do
         begin
           dwBytesRead:= 1024;
           InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
           if (dwBytesRead = 0) then break;
           lpBuffer[dwBytesRead]:= #0;

           AssignFile(F, FileName);
           Append(F);
           Write(F, lpBuffer);
           CloseFile(F);

         end;
       finally
         InternetCloseHandle(hService);
       end;
   end;
 finally
   InternetCloseHandle(hSession);
 end;
end;


если я вызываю функцию так:
HTTP (' http://ip/files/file.txt');
то все нормально

если я вызываю функцию так:
HTTP (' http://ip/files/file.zip');
то файл скачивается поврежденным

Господа, в чем проблема??
Спасибо


Stepper   (2008-04-02 23:15:00) [1]


> Dima   (01.04.08 12:55)


Вот то что тебе надо: http://www.delphisources.ru/pages/faq/base/archives/downloader_code.zip

;)


Reindeer Moss Eater   (2008-04-02 16:35:00) [2]

Хоть законсольных


Dima   (2008-04-02 16:31:00) [3]

аа.. а в случае консольных приложений?


Сергей М.   (2008-04-02 16:25:00) [4]

Ни то ни другое.

Проще всего использовать объект класса TFileStream:

MyFileStream.WriteBuffer(lpBuffer, dwBytesRead);


Dima   (2008-04-02 16:16:00) [5]

Спасибо.
А в таком случае надо
F: File;

или
F: File of char;

?
Честно сказать, я плохо понимаю данный момент


Сергей М.   (2008-04-01 13:09:00) [6]


> файл скачивается поврежденным


Ничего подобного, скачивается он нормальным.
Гадишь полученный контент ты уже сам, своими ручками:


> F: TextFile;


Наверх

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