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

Вниз

Ф-ия Закачки файлов с докачкой   Найти похожие ветки 

 
DelphiN! ©   (2004-06-28 17:29) [0]

Нашел в сети ф-ию закачки файлов с докачкой, однако она работает,  то не работает! Я в недоумении! Кочает через раз, а когда не кочает, то возвращает размер файла на сервере=0, при этом в этих случаях в интернет моя программа даже не проситься, в чем может быть дело? Привожу полный код ф-ии:

If SaveDialog1.Execute then
LocalPath := SaveDialog1.FileName;
label2.caption := "Local path: "+LocalPath;
if LocalPath="" then
exit;

 RestartPos := 0; //<- |?????????????
 fSize := 0; //<- |??????????
 Button1.Enabled := false;
 Button2.Enabled := true;
 //???? ?? ????? ???? ???? ?? ???????, ??? ????? ??????????
 if FileExists(LocalPath) then
 begin
   AssignFile(f, LocalPath);
   Reset(f, 1);
   RestartPos := FileSize(F);
   Seek(F, FileSize(F));
 end
 else
 begin
   //????? ? ??????
   AssignFile(f, LocalPath);
   ReWrite(f, 1);
 end;
 //????????? ??????
 hInet := InternetOpen(Pchar(Application.EXENAME),
   PRE_CONFIG_INTERNET_ACCESS,
   nil,
   nil,
   0);

 //????? ?????????????? ?????? ??? ?????????
 Header := "Accept: */*";
 //????????? URL
 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);
 if RestartPos > 0 then
 begin
   ProgressBar1.Min := 0;
   ProgressBar1.Max := fSize + RestartPos;
   ProgressBar1.Position := RestartPos;
 end
 else
 begin
   ProgressBar1.Min := 0;
   ProgressBar1.Max := fSize + RestartPos;
 end;

 if fsize = 0 then begin
 MessageDlg("Error file size is null!",mterror,[mbok],0);
 exit;
 end;
 //?????? ?? ??? ??? ???? ??????? ?????????? ????? ???? ??
 //????? ????? ???? ??? ?? ????
 while (ReadLen <> 0) and (stop = false) do
 begin
   //?????? ? ?????
   InternetReadFile(hURL, @fBuf, SizeOf(fBuf), ReadLen);
   //??????? ??-?? ???????? ????????
   InternetQueryDataAvailable(hURL, fSize, 0, 0);
   ProgressBar1.Position := ProgressBar1.Position+ReadLen;
   BlockWrite(f, fBuf, ReadLen); //<-????? ? ????
   Application.ProcessMessages;
 end;
 stop := false;
 Button1.Enabled := true;
 Button2.Enabled := false;
 InternetCloseHandle(hURL); //<-|?????????
 InternetCloseHandle(hInet); //<-|???c??
 CloseFile(f); //<-|? ????



В чем дело? И еще до меня совершенно не доходит, почему progressbar не пашет, в progressbar1.max = fsize, а fsize почемуто = ерунде...

Заранее благодарен за помощь


 
Piter ©   (2004-06-29 23:53) [1]

Не знаю как другие участники форума - а мне совершенно лень разбираться в чьем-то чужом коде... переформулируй вопрос - что тебе надо? Искать ошибку в коде за тебя никто не будет...

Что касается лично меня - если бы надо было реализовать докачку - я бы делал ручками... то есть почитал там описание протокола HTTP и FTP (как задавать начало скачки) и использовал стандартный TTCPClient или там TClientSocket...


 
Palladin ©   (2004-06-30 00:52) [2]

Между прочим, сервер не обязан поддерживать докачку.


 
Piter ©   (2004-06-30 01:02) [3]

Кстати, да. Хотя если говорить о ФТП - то в 99% случаев это присутствует. Да и в апачах счас это активно настраивают...



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

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

Наверх




Память: 0.46 MB
Время: 0.031 c
14-1091636339
Fay
2004-08-04 20:18
2004.08.29
Полный RULEZZ!


3-1091557575
Elast
2004-08-03 22:26
2004.08.29
Проблема с кириллицей


14-1092083478
имя
2004-08-10 00:31
2004.08.29
Новая версия проги


4-1089985779
Анатолий
2004-07-16 17:49
2004.08.29
Закрыть хендл, принадлежащий чужому просессу.


14-1092194477
Aldor_
2004-08-11 07:21
2004.08.29
На какой минимальной конфигурации будет приемлемо рабать Win2K?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский