Форум: "Сети";
Текущий архив: 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.036 c