![]() |
FTP-Server abfrage?
Hi, ich brauch nen Code, der auf einem von mir eingestellten FTP-Server nach einer Datei sucht und wenn sie da ist, soll das Programm ne Nachricht ausgeben.
|
Re: FTP-Server abfrage?
Hi,
schau mal, ob Dir die Indy-Komponenten weiterhelfen. Da ist ein FTP-Client dabei. ![]() |
Re: FTP-Server abfrage?
Guten Abend,
Du könntest Dur die Funkton Size der Indy FtpKomponente zu nutzen machen: Zitat:
Klaus |
Re: FTP-Server abfrage?
Also mir fehlt eigentlich nichts mehr, aber ich kann nicht verbinden. Ich habe es einmal hingekriegt aber jetzt gehts nicht mehr. Es kommt diese mit einzelnen Schtitten fortsetzen Meldung. Da drin ist die Meldung res7.worldserver.net (da ist meine HP drauf). Warum kann ich nicht connecten? Habe alle Ports und so richtig eingestellt.
|
Re: FTP-Server abfrage?
Hi,
hast Du vielleicht 'ne Firewall laufen, die den Zugriff verhindert ? |
Re: FTP-Server abfrage?
Zitat:
Grüße Klaus |
Re: FTP-Server abfrage?
|
Re: FTP-Server abfrage?
Bekommst Du die Fehlermeldung beim Connect oder wenn Du mit Size eine
nicht existierende Datei abfragst? Wenn das mit Size so nicht klappt, kannst Du Dir auch mit idftp1.list(StringList,'*.*',false) eine Dateiliste des aktuellen Verzeichnisses laden. Diese Liste kannst Du dann nach der Datei durchsuchen. Grüße Klaus |
Re: FTP-Server abfrage?
Das kommt bei size, verbinden kann ich.
Und wie soll ich das genau machen? ![]() so siehts aus :stupid: |
Re: FTP-Server abfrage?
In etwa sollte es so gehen:
Delphi-Quellcode:
Grüßevar sl: TStringList; begin ... sl := TStringList.create; ftp.list(sl,'*.html',false); if sl.indexOf('test.html') >= 0 then begin //Datei vorhanden end else begin // Datei nicht vorhanden end; sl.free; .. end; Klaus |
Re: FTP-Server abfrage?
Jetzt hab ich wieder die gleich Fehlermeldung wie oben...
|
Re: FTP-Server abfrage?
Un wenn Du *.html durch *.* oder *.htm ersetzt?
Delphi-Quellcode:
ftp.list(sl,'*.*',false);
|
Re: FTP-Server abfrage?
immer noch das gleiche (die datei existiert jetzt auch)
also text.html edit: Warum funktioniert das eigentlich nicht:
Delphi-Quellcode:
?
if anderes.Checked AND paenefeld.Text = '' then
Naja, das rausfinden ob die Datei da ist, ist wichtiger... |
Re: FTP-Server abfrage?
Hallo,
der untenstehen Code funktioniert bei mir ohne Probleme. Die Datei existiert nicht, es gibt keine Exception wie die Deine. Ich habe mit einem lokalen FTP Server getestet.
Delphi-Quellcode:
Vielleicht kannst DU noch mit passive Mode testen.idftp1.Host:='192.168.145.130'; idftp1.Username:='.....'; idftp1.Password:='.....'; idftp1.Connect(); if idftp1.size('test.htm') >= 0 then showMessage('da') else showMessage('nicht da');
Delphi-Quellcode:
Mit einem anderen FTP Client kannst Du Dich zum Server verbinden?
idftp1.Passive
zweite Frage:
Delphi-Quellcode:
Grüße
if anderes.Checked AND (paenefeld.Text = '') then
Klaus |
Re: FTP-Server abfrage?
So sieht der Code jetzt aus:
Delphi-Quellcode:
Soll da noch was geändert werden? Also ich hab mit passiv auf true und false probiert. Klappt nicht. Die Daten sind ja richtig, da ich ja connecten kann. Aber wie muss man den Ordner schreiben? Also nach dem Root kommt der Ordner htdocs (da sind die Dateien drin).
begin
ftp.ChangeDir('/htdocs'); sl := TStringList.create; ftp.list(sl,'*.*',false); if sl.indexOf('test.html') >= 0 then begin showmessage ('funzt'); end else begin showmessage ('funzt nicht'); end; sl.free; end; |
Re: FTP-Server abfrage?
Der Code schaut o.k.
Ich denke aber das schon etwas beim Verbindungsaufbau fehlschlägt. Du bis dir sicher das die ftp Host Adresse "res7.worldserver.net" lauten muss und ftp.res7.worldserver.net? Wie verbindest Du Dich mit einem anderen FTP-Client auf den Server? Grüße Klaus |
Re: FTP-Server abfrage?
Ich hab als Host ja niklas-nelson.de eingegeben, das ist auch beim meinem FTP Client so... und noch ein Problem, was muss ich eingeben, wenn in folgendes machen will
Delphi-Quellcode:
?
if anderes.Checked AND (paenefeld.Text is NOT = 'paene') AND (paenefeld.Text is NOT = '') then
|
Re: FTP-Server abfrage?
Delphi-Quellcode:
oder
if anderes.Checked AND not (paenefeld.Text = 'paene') AND not (paenefeld.Text = '') then
Delphi-Quellcode:
zum FTP Problem habe ich dir ein PN geschickt.
if anderes.Checked AND (paenefeld.Text <> 'paene') AND (paenefeld.Text <> '') then
Grüße Klaus |
Re: FTP-Server abfrage?
Es funktioniert. Danke
|
Re: FTP-Server abfrage?
...und, woran lag es denn?
Grüße Klaus |
Re: FTP-Server abfrage?
Ich hab keeine Ahnung :-D aber hauptsache es klappt. Ich hab jetzt aber erst gemerkt wie viel aufwand das mit dem lateinlernproggi ist :roteyes: :roteyes:
|
Re: FTP-Server abfrage?
Jetzt hab ich diesen Text hier
Delphi-Quellcode:
und ich habe eine test.html mit 280kb auf dem Server angelegt, trotzdem zeigt das Programm kein Update verfügbar. Die Ordener Programme und Latein scheint er nicht zu finden, es kommt aber auch keine Folder not found meldung.
procedure TForm5.Button1Click(Sender: TObject);
begin idftp.Host:='niklas-nelson.de'; idftp.Username:='*meinUsername*'; idftp.Password:='*meinPW*'; try idftp.Connect(); idftp.ChangeDir('/htdocs/programme/latein/'); if idftp.Size('test.html') > 0 then begin showMessage('Update verfügbar! (auf Version 1.1)'); ShellExecute(0, 'open', pchar('http://niklas-nelson.de/programme/latein/test.exe'), nil, nil, SW_SHOWNORMAL); end else showMessage('Es gibt momentan kein Update'); idftp.Disconnect; except on E: EidProtocolReplyError do begin ShowMessage(e.Message+' ReplyErrorCode: '+IntToStr(e.ReplyErrorCode)); end; end; end; |
Re: FTP-Server abfrage?
Delphi-Quellcode:
Nun, in dem Code scheint mit dem FTP kein Problem zu geben.
procedure TForm5.Button1Click(Sender: TObject);
begin idftp.Host:='niklas-nelson.de'; idftp.Username:='*meinUsername*'; idftp.Password:='*meinPW*'; try idftp.Connect(); idftp.ChangeDir('/htdocs/programme/latein'); // hier mal den letzten / gelöscht if idftp.Size('test.html') > 0 then begin showMessage('Update verfügbar! (auf Version 1.1)'); ShellExecute(0, 'open', pchar('http://niklas-nelson.de/programme/latein/test.exe'), nil, nil, SW_SHOWNORMAL); end else showMessage('Es gibt momentan kein Update'); idftp.Disconnect; except on E: EidProtocolReplyError do begin ShowMessage(e.Message+' ReplyErrorCode: '+IntToStr(e.ReplyErrorCode)); end; end; end; Die Exception wird ja nicht ausgelöst. Nun, eine dumme Frage, Du bist Dir sicher das es die Ordner gibt? Und darin liegt auch Deine test.html. Stimmen die die Namen überein (Groß- und Kleinschreibung), denn der Server wird auf Linux o.ä. laufen. Bist Du Dir sicher, das Du die exe direkt vom http Server starten kannst? Ich denke, das wird nicht funktionieren. Du wirst sie auf Deinen Rechner laden müssen und dann ausführen. Grüße Klaus |
Re: FTP-Server abfrage?
anscheinend funktioniert das exe starten nicht aber er sollte ja trotzdem die nachricht anzeigen.
![]() Aber wie kann ich das mit dem exe runterladen sonst machen? Das Programm soll ja für alles die das Lateinbuch haben da sein und die exe soll automatisch runtergeladen werden... |
Re: FTP-Server abfrage?
Hallo Jiro,
ich habe keine Idee warum Dein Programm die Datei nicht findet. Die Datei laden kannst Du mit ftp1.get(..). Grüße Klaus |
Re: FTP-Server abfrage?
Gibt es sonst keine Möglichkeit nach einer Datei zu suchen? Und übrigens, das mit dem get funkt nicht.
Ich habe es so gemacht idftp.get ('http://...'); Fehler: Es gibt keine Überladene Version von Get, die man mit diesen Argumenten aufrufen kann. edit: Ich hab das mit dem size von 0 auf -1 gesetzt- es funkt.... edit2: Aber so funktioniert es auch nciht, weil es trotzdem die Meldung anzeigt auch wenn keine datei da ist |
Re: FTP-Server abfrage?
Hallo Jiro,
Du könntest Dir eine Liste der Dateien Deines aktuellen Verzeichnisses auf dem FTP Server geben lassen. Das geht mit idftp1.list(StringList); Mit idftp1.get kannst Du nicht die Webadresse angeben. Nur den Dateinamen plus Pfad wenn Du nicht in dem Verzeichnis bist wo die Datei liegt. In der Hilfe zu den Indy Komponeten ist auch ein Beispiel dabei. Oder ein gutes Tutorial gibt es ![]() Grüße Klaus |
Re: FTP-Server abfrage?
Und was soll ich machen nachdem ich die liste geholt habe? hast nochmal nen neuen quelltext?
übrigens, es heißt idftp ubnd nicht idftp1 :stupid: :stupid: |
Re: FTP-Server abfrage?
Zitat:
![]() Bei mir heißt die Instanz idftp1, wie sie bei Dir heißt bleibt Dir überlassen. Grüße Klaus |
Re: FTP-Server abfrage?
Gut, jetzt funkts...
Delphi-Quellcode:
so funkts auch nicht wieder die überladen meldung.
idftp.Get('test.exe');
|
Re: FTP-Server abfrage?
Beitrag kann gelöscht werden.
|
Re: FTP-Server abfrage?
Welche Möglichkeiten eine exe Datei von nem FTP server zu holen gibts noch? mit get steht da immer was mit überladen und normal öffnen klappt auch nicht...
achja, sorry für DoPo |
Re: FTP-Server abfrage?
Nun, wenn da etwas mit überladen steht, dann versorgst Du die get Methode
mit den falschen Parametern. Eine Alternative zu TidFTp.get findest Du ![]() Ansonsten hilft es in der Hilfe nachzuschauen, da würde man die Aufrufsyntax finden: Zitat:
Klaus |
Re: FTP-Server abfrage?
Aber irgendwie versteh ich das nicht, da steht doch filename und den hab ich eingegeben. Was brauch ich denn sonst noch? Die andere Methode ist mir zu kompliziert.
|
Re: FTP-Server abfrage?
Zitat:
Das Tutorial hast Du dir auch schon angeschaut und auch verstanden?
Delphi-Quellcode:
Wenn Du get so aufrufst, will es als ASourceFile den Dateinamen und als aDest einen Stream, wenn
procedure Get(const ASourceFile: string; ADest: TStream); overload;
Du die Datei speichern willst einen TFileStream ansonsten kannst Du auch einen TMemoryStream nehmen.
Delphi-Quellcode:
var
myFileStream : TFileStream; myFileStream := TFileStream.create('hier soll die Datei hin und so soll sie heißen',fmcreate); idftp1.ChangeDir(...); idftp1.get('test.exe',myFileStream); myFileStream.free;
Delphi-Quellcode:
Wenn Du get mit diesen Parametern aufrufst, will es ASourceFile den Dateinamen auf dem FTP Server
procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean); overload;
aDest als den Dateinamen wie es auf Deinem PC abgespeichert werden soll. ACanOverWrite ist die Option ob das File auf Deinem PC überschrieben werden kann. Würde bei Dir so ausschauen:
Delphi-Quellcode:
Grüße
idftp1.ChangeDir(..);
idftp.get('Test.exe','hier soll die Datei hin und so soll sie heißen',false); Klaus |
Re: FTP-Server abfrage?
rSo sieht mein Code jetzt aus:
Delphi-Quellcode:
Ich glaube ich hab da was falsch verstanden oder ist das richtig? Das proggi soll ja auch für alle sein, also muss die Datei im ordner gespeichert werden, wo das Programm drin ist und nicht in einem von mir angegebenen Ordner. Sonst gibts ja noch die Möglichkeit rauszufinden wo das Programm drin ist. Geht das auch noch wenn das installiert ist (ich mache dafür ein Setup (mit INNO)
procedure TForm5.Button1Click(Sender: TObject);
var sl: TStringList; stream : TfileStream; begin idftp.Host:='niklas-nelson.de'; idftp.Username:='...'; idftp.Password:='...'; idftp.Connect(); idftp.ChangeDir('/htdocs/programme/latein'); sl := TStringList.create; idftp.list(sl,'*.*',false); if sl.indexOf('test.html') >= 0 then begin showmessage ('Es gibt ein Update (Version 1.1)'); stream.Create('test.exe',fmcreate); idftp.Get('test.exe', stream); idftp.Disconnect; stream.Free; end else begin showmessage ('Ne Ne, kein Update da'); idftp.Disconnect; end; sl.free; end; procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean); overload; //die Get procedure funktioniert gar nicht. Aber wenn ich den oberen Teil so lasse kommt wieder eine Exception. begin idftp.Host:='niklas-nelson.de'; idftp.Username:='...'; idftp.Password:='...'; idftp.connect (); idftp.ChangeDir('/htdocs/programme/latein'); idftp.get('Test.exe','test.exe',false); end; |
Re: FTP-Server abfrage?
Delphi-Quellcode:
So wird die test.exe in das Verzeichnis kopiert wo auch die Aplikation installiert wurde.
stream.Create('ExtractFilePath(ParamStr(0))+'test.exe',fmcreate);
Eine kleine Anmerkung habe ich noch, Du schließt darauf das ein Update zur Verfügung steht wenn eine bestimmte Datei auf dem FTP-Server liegt. Dabei wird nicht überprüft welche Version die Aplikation gerade hat. Habe ich z.B. 1.1 und das File liegt auf dem Server, dann wird mir ein Update auf 1.1 angeboten. Die Version habe ich aber schon. Grüße Klaus |
Re: FTP-Server abfrage?
Ich habe mir das so gedacht, dass ich in der aktuellen Version 1.0 nach der Datei plan11.html auf dem Server suche. Und in der Version 1.1 ändere ich es so um, dass das programm nach der Version 1.2 sucht.
|
Re: FTP-Server abfrage?
Zitat:
und nach einiger zeit nicht auf Version 1.1 updaten will. Nun kommt die Version 1.2 heraus, der User will nun ein update durchführen. Die Folge ist, er muß erst ein Update auf 1.1 machen danach kann er erst ein Update auf 1.2 machen. Wäre es nicht sinnvoller eine "VersionsInfo.txt" Datei auf dem FTP-Server zu halten. Hier steht die letzte Version drin. Der User lädt sich die Datei, schaut hinein und vergleicht die Versionsnummer mit der Version seines Programms. Ist seine Versionsnummer kleiner als die auf dem Server liegende bekommt er den Hinweis auf eine neuere Version angezeigt. Grüße Klaus |
Re: FTP-Server abfrage?
Gut, wie kann man das realisieren? Wieder mit ftp.get? Und dann in der Datei suchen?
achja: stream.Create('ExtractFilePath(ParamStr(0))+'test. exe',fmcreate); Es gibt keine überladene Version von create, die man mit diesen Parametern aufrufen kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 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