[Delphi]URLDownloadToFile nie pobiera całego pliku

Witam. Mam problem. Robię AutoAktualizację w moim programie, i używam do tego celu funkcję z tematu :smiley: Nowa wersja programu (czyli to, co ma być pobrane) jest na moim FTP. I wszystko ładnie pięknie, zrobiłem, że sprawdza czy jest nowa werjsa itp, itd. Tylko gdy ma dojść do pobrania programu, to aktualizator (z funkcją URL…) pobiera mi tylko część z całego pliku. Dajmy na to plik ma 7 MB, a pobrane jest tylko 150KB… Nie rozumiem kompletnie, o co chodzi. Dlaczego tak się dzieje. Co zrobić, aby program pobierał cały plik, zawsze. Z góry dzięki.

Problem zerwania połączenia, zainstaluj sobie FileZilla (darmowa) i jeżeli ona wyświetli przy odpaleniu komunikat (czego jestem prawie pewien) to w treści komunikatu będziesz wiedzieć co robić. Jak nie da tego komunikatu to wklej kod, zobaczymy w czym może być problem.

Widzę, że nie do końca się zrozumieliśmy :slight_smile: Tu nie chodzi o to, że jest zrywane połączenie. To można powiedzieć, że FileZilla nic do tego nie ma, ani jej komunikaty. Jak pobierasz plik z internetu, to także z serwera FTP, tylko że zwykle to się pobiera w całości. A mój program nie chce w całości pobrać pliku. Więc [alex], dzięki, za odpowiedź, ale nie do końca o to mi chodziło. No więc, czy ktoś potrafi mi pomóc?

Jednak do końca cię rozumiem, zrób tak jak zaproponowałem. FileZilla (w pewnych warunkach) tez czasami tak robi nie ściąga całego pliku, ale przy każdym starcie sprawdza te warunki i ewentualnie uprzedza o tym że tak może się stać, podaje przyczynę bardzo szczegółowo i nie tylko przyczynę ale też metod rozwiązania.

Jednak FileZilla nic nie wykazała. Może wkleję ten kod dla buttona start(jeśli gdzieś dałem *, to znaczy, że nie mogę tej treści udostępnić:

try

start.Caption:='Aktualizacja trwa...';

start.Enabled:=False;

anuluj.Enabled:=False;

ver.Text:=verNet.Text;

ver.Lines.SaveToFile('Files\ver.txt');

if URLDownloadToFile(nil, ' **adres, z ktorego pobiera**', ' **nazwa pliku***', 0, nil) <> 0 then MessageBox(handle, 'Aktualizacja programu z jakiegoś powodu nie może się odbyć. Sprawdź połączenie z internetem, lub spróbuj aktualizować w późniejszym czasie.', 'Nie można aktualizować...', MB_OK + MB_ICONERROR);

ShellExecute(0, 'open', '***', nil, nil, SW_SHOW);

Application.Terminate;

except

//tutaj MessageBox

end;

To ten kodzik. Nie rozumiem, co w nim może być nie tak, czy to przez niego funkcja nie pobiera całego pliku?

Wg mnie wszystko w porządku, spróbuj dać callback’a w ostatnim parametrze, może dowiesz się więcej na temat przebiegu downlod’a.

Poza tym to funkcja zrobiona przez programistów microsofta, wiec może mieć miliony błędów w środku :slight_smile:

Ja wszystkie operacji na FTP robię za pomocą darmowej biblioteki Indy (łatwo znaleźć w google), tobie też radzę.

Więcej na temat tej funkcji:

http://msdn.microsoft.com/en-us/library/ms775123(VS.85.aspx