![]() |
Dateien von einem Ftp server runter/hochladen
Also ich habe folgendes Problem:
Ich möchte ein Programm schreiben, das beim click auf einen button oder vllt. auch immer nach einer bestimmten zeit automatisch alle dateien von einem bestimmten ftp server runterläd und diese dann auf einem anderen ftp server wieder hochläd, falls diese dort schon sind halt auch überschreibt. Wie mache ich das? Ich kenn zwar die Befehle zum hoch/runterladen, allerdings krieg ich einfach nicht hin, dass er automatisch die namen der Dateien auf dem ftp server ausließt und diese dann runterläd. [edit=SirThornberry]Programmiersprache von .NET auf Win32 geändert - Mfg, SirThornberry[/edit] |
Re: Dateien von einem Ftp server runter/hochladen
Willst du wirklich mit .NET arbeiten oder hast du dich da verklickt? Das kommt öfter mal vor
Wie lädtst du denn Dateien so runter? Mit den Indys? |
Re: Dateien von einem Ftp server runter/hochladen
Bin mir net sicher ^^ hab Borland Delphi 7
Ja ich benutze die Indy Komponenten |
Re: Dateien von einem Ftp server runter/hochladen
Okay, dann ist das Win32. Ich habe zwar noch nie mit FTP gearbeitet, aber
![]() |
Re: Dateien von einem Ftp server runter/hochladen
Hab ich auch gemacht, aber iwie kann ich die dateien net runterladen
|
Re: Dateien von einem Ftp server runter/hochladen
Hat keiner eine Idee?
Also ich möchte einfach mit IdFtp alle Dateien von einem Server herunterladen, um sie dann auf einem anderen Ftp Server wieder hochzuladen nur hab ich keine Ahnung wie ich das machen soll 1. Muss ich es iwie schaffen das alle Dateien runtergeladen werden, also außer list die Namen auslesen etc. 2. Muss ich die dateien ja iwo zwischenspeichern um sie dann wieder hochzuladen Bitte helft mir, is wirklich wichtig (Schulprojekt) ich hab nem Lehrer zugesagt das ich das mache weil kein anderer in dieser Richtung wirklich was kann, hatte mir das aber n bissle leichter vorgestellt und verzweifel nun. |
Re: Dateien von einem Ftp server runter/hochladen
Was schaffst du denn jetzt nicht?
1. Auflisten der Dateien 2. Runterladen 3. Hochladen |
Re: Dateien von einem Ftp server runter/hochladen
Punkt 1 is kein Problem, hab alles in meiner Listbox aufgelistet. Nur Punkt 2 und 3 klappt net wirklich.
procedure TForm1.connectbutClick(Sender: TObject); var i:integer; name:string; begin if idftp1.connected=false then begin idftp1.Username:='admin'; idftp1.password:='password'; idftp1.Host:='127.0.0.1'; idftp1.connect; IdFTP1.List(ListBox.Items); end end; Das is bisher der Code, ich weis nich genau wie ich die Namen der einzelnen Dateien rausfinde, dachte zuerst an sowas: for i:=0 to Listbox.Count-1 do begin name:=listbox.Items.Strings[i]; IdFTP1.Get(Name, SaveDialog1.FileName, true); end Aber dann kommt dieser Error: Im Project Project1.exe ist eine Exception der Klasse EFCreateError aufgetreten. Meldung: 'Datei "" kann nicht erstellt werden. Das System kann den angegebenen Pfad nicht finden'. |
Re: Dateien von einem Ftp server runter/hochladen
Den String bekommst aus Deiner Listbox bekommst Du mit:
Delphi-Quellcode:
Dein "Strings" dabei ist überflüssig.
Name := ListBox1.Items[i];
|
Re: Dateien von einem Ftp server runter/hochladen
Ja hatte ich auch eigentlich, nur n bissle rumprobiert.
Also mit folgendem Code kann ich schonmal die Namen rausfinden: procedure TForm1.connectbutClick(Sender: TObject); var i:integer; name:string; begin if idftp1.connected=false then begin idftp1.Username:='admin'; idftp1.password:='******'; idftp1.Host:='127.0.0.1'; idftp1.connect; IdFTP1.List(ListBox1.Items); for i:=0 to Listbox1.Count-1 do begin name:=listbox1.Items[i]; listbox2.Items.Add(name); end end; end; Dann wird zwar in listbox2 genau das gleiche wie in listbox1 angezeigt aber ich kann immer jeweils nach einer Namensausgabe einen Befehl ausführen, sprich: for i:=0 to Listbox1.Count-1 do begin name:=listbox1.Items[i]; listbox2.Items.Add(name); *Da könnte man dann die jeweilige Datei runterladen* end Ich verstehe einfach noch nicht ganz wie das dann mit dem runterladen und dem hochladen funzt. |
Re: Dateien von einem Ftp server runter/hochladen
Schau Dir doch einfach mal die OH zu den Indy-Komponenten an,
da wirst Du schon weiter kommen. Als kleiner Tipp: Idftp1.Get eingeben und mit Strg+Leer die dazugehörigen Parameter anzeigen Moin |
Re: Dateien von einem Ftp server runter/hochladen
Oben war eigentlich schon alles richtig. Der SaveDialog1 muss nur vorher mit .Execute mal geöffnet werden, sonst steht in .Filename natürlich nichts drin.
|
Re: Dateien von einem Ftp server runter/hochladen
Okay danke schonmal werde das nacher mal ausprobieren hab immoment keine zeit.
Also: IdFTP1.Get(Name, SaveDialog1.execute, SaveDialog1.FileName, true); oder? |
Re: Dateien von einem Ftp server runter/hochladen
Nein:
Delphi-Quellcode:
if SaveDialog1.Execute then
IdFTP1.Get(Name, SaveDialog1.FileName, true); |
Re: Dateien von einem Ftp server runter/hochladen
achso ok, danke :)
|
Re: Dateien von einem Ftp server runter/hochladen
Ok habs so probiert und es öffnet sich auch ein savedialog, ich hab einen namen eingegeben und wollte es runterladen, dann kam aber ein EidProtocolReplyError. Meldung: "File not found."
Muss ich noch den Transfertyp angeben oder wieso findet er die File net? Hier nochmal der bisherige Code: procedure TForm1.connectbutClick(Sender: TObject); var i:integer; name:string; begin if idftp1.connected=false then begin idftp1.Username:='admin'; idftp1.password:='******'; idftp1.Host:='127.0.0.1'; idftp1.connect; IdFTP1.List(ListBox1.Items); for i:=0 to Listbox1.Count-1 do begin name:=listbox1.Items[i]; listbox2.Items.Add(name); if SaveDialog1.Execute then IdFTP1.Get(Name, SaveDialog1.FileName, true); end end; end; EDIT: Also ich sehe wenn sich der savedialog öffnet auch genau die erste File in der Listbox 2. Also mit der for und der if schleife klappt alles, nur das runterladen funzt noch net ganz. Achja kann ich das ganze auch runterladen ohne das sich ein savedialog öffnet? Er es also einfach unter nem bestimmten Namen speichert. Also vllt: savename:=name+i; Dann hätte ich bei jeder Datei automatisch n anderen Namen und es würde sich nix überschreiben. Sry bin noch n Noob was Delphi angeht. |
Re: Dateien von einem Ftp server runter/hochladen
Natürlich kannst du das auch ohne SaveDialog machen... aber du musst schon selber wissen wie die Dateien heißen sollen. Ich verstehe nicht so ganz, du lädst ja Dateien herunter um sie wieder hochzuladen. Wenn ich davon ausgehe das es sich um HTML Dateien und Bilder handelt, wäre es doch Blödsinn die Dateien umzubenennen.
Delphi-Quellcode:
...
IdFTP1.Get(Name, {einfach hier deinen Dateinamen hin}, true); ... |
Re: Dateien von einem Ftp server runter/hochladen
Also es handelt sich um pdf dateien.
Ja ich wusste net ob er die so abspeichert wie sie heißen oder ob man n extra namen angeben muss. Naja die error meldung kommt halt immernoch wie oben beschrieben. |
Re: Dateien von einem Ftp server runter/hochladen
Ich komm einfach nicht weiter immer kommt der oben genannte Fehler, was stimmt an dem Code nicht?
Und wo finde ich eigentlich die indy demos von denen hier immer geredet wird? danke schonmal im vorraus |
Re: Dateien von einem Ftp server runter/hochladen
Gibt es hier keinen der sich mit den Ftp Indy Komponenten auskennt?
Bitte ich muss das in dieser Woche fertig kriegen und ich bin immernoch kein Stück weitergekommen. Ich kann die Dateien einfach net runterladen. Der savedialog öffnet sich, wenn ich die Datei dann aber speichern und halt runterladen will kommt die Meldung: EidProtocolReplyError. Meldung: "File not found."
Code:
procedure TForm1.connectbutClick(Sender: TObject);
var i:integer; name:string; begin if idftp1.connected=false then begin idftp1.Username:='admin'; idftp1.password:='******'; idftp1.Host:='127.0.0.1'; idftp1.connect; IdFTP1.List(ListBox1.Items); for i:=0 to Listbox1.Count-1 do begin name:=listbox1.Items[i]; listbox2.Items.Add(name); if SaveDialog1.Execute then IdFTP1.Get(Name, SaveDialog1.FileName, true); end end; end; |
Re: Dateien von einem Ftp server runter/hochladen
Delphi-Quellcode:
Wenn Du den Code so änderst, stimmt dann der Name in der Messagebox mit dem Namen in der Listbox überein.
procedure TForm1.connectbutClick(Sender: TObject);
var i:integer; name:string; begin if idftp1.connected=false then begin idftp1.Username:='admin'; idftp1.password:='******'; idftp1.Host:='127.0.0.1'; idftp1.connect; IdFTP1.List(ListBox1.Items); for i:=0 to Listbox1.Count-1 do begin name:=listbox1.Items[i]; listbox2.Items.Add(name); if SaveDialog1.Execute then begin ShowMessage(name); IdFTP1.Get(Name, SaveDialog1.FileName, true); end; end end; end; Grüße Klaus |
Re: Dateien von einem Ftp server runter/hochladen
Jap stimmt überein, wobei mich bissle wundert das z.B. die Datei Anleitung.txt auch inner Listbox "-r--r--r-1 ftp ftp 6677 Jul 30 2001 Anleitung.txt" heißt.
|
Re: Dateien von einem Ftp server runter/hochladen
Zitat:
Statt des nackten Listings bietet TIdFTP aber auch die Möglichkeit über das Property DirectoryListing auf eine fertig durch einen Parser aufbereitete Liste mit einzelnen Werten zuzugreifen. Die Doku dazu ist recht umfangreich und ich hab nur mal kurz quergelesen, aber dort bekommst Du auch den Dateinamen als einzelnes Element geliefert. |
Re: Dateien von einem Ftp server runter/hochladen
Danke schonmal, kannst du mir noch bitte sagen wo ich die Doku über TidFTP finde?
|
Re: Dateien von einem Ftp server runter/hochladen
|
Re: Dateien von einem Ftp server runter/hochladen
Ich habs aber genauso wie da gemacht:
![]() IdFTP1.List(DirectoryListBox.Items); Genau so hab ichs gemacht, bei dem Beispiel bekommen die aber auch nicht den exaten Namen, sondern nur alles zusammen (datum etc.) |
Re: Dateien von einem Ftp server runter/hochladen
Ja, das Beispiel da ist etwas zusammengestückelt, Download und Upload sind komplett separat gehalten, die Listbox darüber dient lediglich der (durch Proportionalfont ohne Spaltenanordnung etwas verhackstückten) Anzeige der Verzeichnisinhalte auf dem Server. Wenn Du genau hinschaust, gibt es zwischen den drei Teilen Anzeige, Upload und Download keine direkte Verbindung!
|
Re: Dateien von einem Ftp server runter/hochladen
Ja das weiß ich, du meintes aber das man damit den wirklichen Namen der Datei herausfinden könnte, bei dem Beispiel sieht er die Datei jedoch auch nur mit Datum und so weiter, also genauso viel wie ich zurzeit auch.
|
Re: Dateien von einem Ftp server runter/hochladen
Das "Sehen" ist ja nicht das Problem. Der Trick ist, dass der Inhalt der Liste nur zur Anzeige genutzt wird, nicht fürs Downloaden. Um einen in der Liste ausgewählten Titel herunterzuladen muss man die ganze Liste anders aufsetzen und das oben erwähnte Property benutzen um die Elemente jeder Zeile einzeln zu bekommen. Ich hab jetzt leider wirklich keine Zeit, Dir das alles vorzukauen, lies die Indy-Doku und experimentiere, so lernst Du am meisten dabei. Programmieren besteht zu einem nicht unwesentlichen Teil aus hartnäckigem Erarbeiten von Wissen, es ist nicht damit getan, sich einfach ein beliebiges Demo zu schnappen und an dessen Details herumzuschrauben. Benutz die Demos nur dazu, Dir Anregungen zu holen ("wie ist das da wohl gelöst?"), aber entwickel dann Deinen eigenen Code für das Problem. Das fällt anfangs schwer, aber wer sich nicht entmutigen lässt, sammelt damit massiv Erfahrungswerte die einem danach immer wieder zugute kommen. Je mehr Du selber ausprobierst und experimentierst, desto besser und erfolgreicher wirst Du programmieren können, um es einmal kurz und knapp zu formulieren.
|
Re: Dateien von einem Ftp server runter/hochladen
Also ich habe mir die Filenames einfach so rausgeholt:
Delphi-Quellcode:
Dann sind keine Nebeninfos mehr drin, dur die Dateinamen; so solltest Du auf jeden fall auch die Namen auslesen.
idftp.List (memo1.Lines,'',false);
|
Re: Dateien von einem Ftp server runter/hochladen
danke sehr, werd ich gleich mal probieren, wenn ich jetzt den richtigen namen habe müsste es dann funzen oder hab ich noch etwas vergessen (übertragungsart etc.)?
edit: ok hat sich erledigt, habs grade probiert und es klappt alles, danke schonmal für alles ;) jetzt muss nurnoch der upload dran glauben ^^ edit2: kann ich diesen savedialog irgendwie wegbekommen? der benutzer soll nix vom download mitbekommen also sollte auch am besten kein savedialog geöffnet werden sondern einfach nur abgespeichert werden. Und vorallem, wie kann ich den Dateitypen bestimmen unter dem es gespeichert werden soll?
Code:
procedure TForm1.connectbutClick(Sender: TObject);
var i,position:integer; name,s:string; begin if idftp1.connected=false then begin idftp1.Username:='admin'; idftp1.password:='123456'; idftp1.Host:='127.0.0.1'; idftp1.connect; Idftp1.List (Listbox1.Items,'',false); for i:=0 to Listbox1.Count-1 do begin name:=listbox1.Items[i]; listbox2.Items.Add(name); position:=pos('.',name); // Da bekomme ich die Endung der Datei if SaveDialog1.Execute then begin position:=pos('.',name); s:=copy(name,position,4); IdFTP1.Get(Name, Name, true); end end end; end; |
Re: Dateien von einem Ftp server runter/hochladen
Nun Ja, das sollte nun ja nicht mehr so schwehr sein.
Prinzipiell verstehe ich auch net so ganz was zu mit der zweiten listbox willst. Es würde einfach nur folgendes ausreichen
Delphi-Quellcode:
idftp1.connect;
Idftp1.List (Listbox1.Items,'',false); for i:=0 to Listbox1.Count-1 do begin IdFTP1.Get(Listbox1.Items[i], 'C:\MeinDownloadVerzeichnis\' + Listbox1.Items[i], true); end; |
Re: Dateien von einem Ftp server runter/hochladen
ja die zweite listbox ist sinnlos, die hatte ich nur gemacht um die Schleife zu testen ;)
Speichert er die dann auch mit der richtigen Dateiendung ab? Probiers nacher aus sitze grade nicht an meinem rechner. |
Re: Dateien von einem Ftp server runter/hochladen
Also ich habs grade probiert und der SaveDialog öffnet sich immernoch
Code:
Dann dachte ich mir, lass ich das "if SaveDialog1.Execute" einfach weg und schreibe nur IdFtp1.Get... aber dann kommt ne Error Meldung mit File not found...
procedure TForm1.connectbutClick(Sender: TObject);
var i,position:integer; name,s:string; begin if idftp1.connected=false then begin idftp1.Username:='admin'; idftp1.password:='123456'; idftp1.Host:='127.0.0.1'; idftp1.connect; Idftp1.List (Listbox1.Items,'',false); for i:=0 to Listbox1.Count-1 do begin name:=listbox1.Items[i]; if SaveDialog1.Execute then begin {position:=pos('.',name); s:=copy(name,position,4);} IdFTP1.Get(Name,'C:\Dokumente und Einstellungen\'+'i', true); end end end; |
Re: Dateien von einem Ftp server runter/hochladen
Also meine konkrete Frage lautete: Wie kann ich Dateien von einem Ftp Server runterladen ohne das sich der Savedialog öffnet?
|
Re: Dateien von einem Ftp server runter/hochladen
Was spricht gegen das Beispiel aus dem Beitrag 32?
Grüße Klaus |
Re: Dateien von einem Ftp server runter/hochladen
Das funktioniert eben nicht.
Wenn ich die Bedingung (savedialog1.execute) weglasse kommt ein eidprotokollerror: FIle not found. Wenn ich die Bedingung aber lasse dann öffnet sich der Savedialog immernoch. |
Re: Dateien von einem Ftp server runter/hochladen
Gibt es nicht noch eine andere Möglichkeit?
|
Re: Dateien von einem Ftp server runter/hochladen
Zitat:
Delphi-Quellcode:
procedure TForm1.connectbutClick(Sender: TObject);
var i,position:integer; name,s:string; begin if idftp1.connected=false then begin idftp1.Username:='admin'; idftp1.password:='123456'; idftp1.Host:='127.0.0.1'; idftp1.connect; Idftp1.List (Listbox1.Items,'',false); for i:=0 to Listbox1.Count-1 do begin name:=listbox1.Items[i]; // if SaveDialog1.Execute then begin <<< die hier raus, die ruft den dialog auf {position:=pos('.',name); s:=copy(name,position,4);} IdFTP1.Get(Name,'C:\Dokumente und Einstellungen\File'+'i', true); // end end end; |
Re: Dateien von einem Ftp server runter/hochladen
Dann bekomme ich den EidProtokollError: "File not Found"
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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