![]() |
[IdFtp, IndyFTP] Download fortsetzen funtzt einfach nicht!
Hallo,
Ich habe das folgende Problem: Ich will einen abgebrochenen Download fortsetzen, habe alle Empfehlungen im Internet ausprobiert - nichts funktioniert! Mein Code:
Delphi-Quellcode:
Ich habe auch ohne Filestream, also direkt mit
...
{------------------------------------------} { Den FileStream fuer den Resume erstellen } {------------------------------------------} if FileExists(Zieldatei) then begin Fs := TFileStream.Create(Zieldatei, fmOpenReadWrite); Fs.Position := Fs.Size; end else Fs := TFileStream.Create(Zieldatei, fmCreate); {------------------------------------------} { Ab der gewissen Position anfangen } {------------------------------------------} Ftp.Get(Quelldatei, Fs, True); Ftp.KillDataChannel;
Code:
versucht, aber es will nicht funktionieren!
Ftp.Get(Quelldatei, Zieldatei, False, True);
Ich wuerde mich sehr freuen, wenn mir jemand helfen koennte! Meine Indy-Version: 10.0.2151.25345 [<-- Vielleicht liegt es an der Indy-Version???] Meine Programmierumgebung: Borland Developer Studio 2006 Danke im Voraus! |
Nachtrag: [IdFtp, IndyFTP] Download fortsetzen ...
... und der Server unterstuetzt 100%ig Resumes, weil die Property CanResume True ist und mit SmartFTP der Resume einwandfrei geht. :wall:
|
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Herzlich willkommen in der Delphi-PRAXiS, white-desert.
Ich habe zum Testen D7, Indy9 und Sambar63 verwendet - und es funktioniert!
Delphi-Quellcode:
Vielleicht findest du deinen Fehler durch einen Vergleich mit meinem Code?
function Download(const url: String; fnLocal: TFileName): Boolean;
var fs: TStream; s: TStrings; ftp: TIdFTP; begin s := TStringList.Create; if CrackUrl(url, s) and (AnsiIndexText(s.Values['scheme'], ['ftp', '']) >= 0) then begin ftp := TIdFTP.Create(Application); ftp.Host := s.Values['hostname']; if ftp.Host = '' then ftp.Host := 'localhost'; ftp.Username := s.Values['username']; if ftp.Username = '' then ftp.Username := 'anonymous'; ftp.Password := s.Values['password']; try ftp.Connect; if FileExists(fnLocal) then fs := TFileStream.Create(fnLocal, fmOpenReadWrite or fmShareDenyWrite) else fs := TFileStream.Create(fnLocal, fmCreate); if ftp.ResumeSupported then fs.Position := fs.Size; try ftp.Get(s.Values['urlpath'], fs, fs.Position > 0); Result := True; finally fs.Free; end; ftp.Disconnect; except Result := False; end; end else Result := False; s.Free; end; // Getestet habe ich so: procedure TDemoForm.DownloadButtonClick(Sender: TObject); const fn = 'c:\temp\demo.uxp'; url = 'ftp://localhost/demo.uxp'; begin if FileExists(fn) then with TFileStream.Create(fn, fmOpenReadWrite or fmShareDenyWrite) do begin Size := Size shr 1; ShowMessage(Format('size before download: %d', [Size])); Free; end; if Download(url, fn) then with TFileStream.Create(fn, fmOpenRead or fmShareDenyNone) do begin ShowMessage(Format('size after download: %d', [Size])); Free; end; end; ![]() Freundliche Grüße vom marabu |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Danke fuer deine Antwort und Muehe, ich habe meinen Quellcode an deinen angepasst: es geht immer noch nicht! Das liegt dann wohl an der Indy-Version (siehe oben). Oder hat jemand andere Erfahrungen gemacht?
|
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Vielleicht liegt es auch am FTP Server, das er dieses nicht unterstützt.
Grüße Klaus |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
hmm kann schon sein das es an denn 10er indys liegt, die haben bei manchen schon so komische
probleme verursacht!!! könntest du bei der installation nicht auswählen welche indys du nehmen willst??? |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Ich mag nicht glauben, dass Indy10 hier schuld an den Problemen ist. Die meisten Probleme mit den Indy10-Komponenten dürften ohnehin dadurch verursacht werden, dass - wie so oft schon in diesem Projekt - ein paar Dinge über den Haufen geworfen oder anders implementiert wurden - Stichwort Abwärts-Kompatibilität. Zum Für und Wider dieser Praxis meine ich auch schon Aussagen vom Project Team gelesen zu haben.
Ich würde die Code-Zeilen im internen Debugger abarbeiten und schauen wo im Detail es klemmt. Freundliche Grüße |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Zitat:
Zitat:
oder meinst du, dass ich den IdFTP-Code anschauen soll? Zitat:
|
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Hallo,
kannst du ein kleines Demo-Projekt basteln? Ich würde es dann unter meinen Bedingungen (D7, Indy9) zum Laufen bringen. Dabei erkenne ich vielleicht, ob es an deinem Code liegt oder an etwas anderem. Freundliche Grüße |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Hallo,
ich habe derzeit das gleiche Problem, und kann die Erfahrung mit Indy 10 nur bestätigten, ein Fortsetzen geht nicht. Das Problem scheint zu sein, das die get-Routine immer ein FTP Befehl "REST 0" for dem "RETR filename" zum Server sendet und damit immer von Anfang an geladen wird. Die Tatsächliche Positionsangabe im Sourcefile wird warum auch immer ignoriert. |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Ich hab' die IdFTP.Get-Methode umgeschrieben. So funktioniert sie wie gewünscht:
Delphi-Quellcode:
Viele Grüße,
procedure TIdFTP.Get(const ASourceFile: string; ADest: TIdStream; AResume: Boolean = False);
begin //for SSL FXP, we have to do it here because InternalGet is used by the LIST command //where SSCN is ignored. ClearSSCN; AResume := AResume and CanResume; if AResume then ADest.Position := ADest.Size else ADest.Position := 0; InternalGet('RETR ' + ASourceFile, ADest, AResume); end; Chris |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Hallo,
habe selbst mal in den Source von INDY geschaut (IDFTP): procedure TIdFTP.Get(const ASourceFile: string; ADest: TIdStream; AResume: Boolean = False); begin //for SSL FXP, we have to do it here because InternalGet is used by the LIST command //where SSCN is ignored. ClearSSCN; AResume := AResume and CanResume; ADest.Position := 0; InternalGet('RETR ' + ASourceFile, ADest, AResume); end; Mit ADest.Position:=0; wird immer explizit vom Anfang her geladen, wenn mann diese Zeile auskommentiert, funktioniert auch der Vorschlag von Malibu. (und mein Problem war auch gelöst!) Schöne Grüße, |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
sorrry, meinte natürlich marabu!
|
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
Habe das gleiche Problem, habe das ganze auch schon im Indy-Source ausgebessert, meine Frage wäre nun, muss ich die Indy-Komponenten neu kompilieren damits Wirkung zeigt? Wenn ja, wie, wo :drunken: ?
Danke im Vorraus Wiggles |
Re: [IdFtp, IndyFTP] Download fortsetzen funtzt einfach nich
*push*
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz