| Autor |
Beitrag |
Robii
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 14:05
Guten Tag, mal wieder ein Problem. Eigentlich nichts schweres aber mein Programm streikt. Ich möchte gerne, mit meinem Programm beim Start des Programms 3 Dateien herunterladen. Folgenden Code verwende ich:
Funktion:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| const AppDataRootDir = '\WTree'; AppDataProjectDir = '\AppDir WTree';
[..]
Function GetSpecialFolder (aFolder: Integer): String; var pIdL: PItemIDList; Path: Array [0..Max_Path] Of Char; Allocator: IMalloc; Begin SHGetSpecialFolderLocation (0, aFolder, pIdL); SHGetPathFromIDList (pIDL, Path); If Succeeded (SHGetMalloc (Allocator)) Then Begin Allocator.Free (pIdL); {$IFDEF VER100} Allocator.Release; {$ENDIF} End; Result := Path; End;
[..]
procedure TForm1.FormCreate(Sender: TObject); var MyFtp: TIdFtp; Ex1,Ex2,Ex3,dF1,dF2,dF3: String; UserAppDataDir: String; begin UserAppDataDir := GetSpecialFolder(CSIDL_LOCAL_APPDATA); ForceDirectories(UserAppDataDir + AppDataRootDir + AppDataProjectDir); Ex1 := 'AutoStart.exe'; Ex2 := 'Befehle.exe'; Ex3 := 'Tree.exe'; MyFtp := TidFtp.Create; try MyFtp.Host:= 'ftp.********.**.funpic.de'; MyFtp.Username := '*******'; MyFtp.Password := '****'; MyFtp.Connect; MyFtp.Get(Ex1,UserAppDataDir+AppDataRootDir+AppDataProjectDir+Ex1); MyFtp.Get(Ex2,UserAppDataDir+AppDataRootDir+AppDataProjectDir+Ex2); MyFtp.Get(Ex3,UserAppDataDir+AppDataRootDir+AppDataProjectDir+Ex3); MyFtp.Disconnect; finally MyFtp.Free; end; |
Die Fehlermeldung ist immer, das die Datei schon existiert, wobei dies zu 100% unmöglich ist.
Edit: Die Destination File meine ich natürlich.
Beim debuggen ist mir aufgefallen, das er in dem Try alles nach MyFtp.Connect überspringt.
Also müsste ja logischer Weise dort der Fehler sein oder nicht?
Wieso? Gruß.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 22.06.09 15:09
Probiers mal so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| const AppDataRootDir = 'WTree'; AppDataProjectDir = 'AppDir WTree';
[..]
procedure TForm1.FormCreate(Sender: TObject); var MyFtp: TIdFtp; Ex1, Ex2, Ex3, dF1, dF2, dF3, UserAppDataDir, SavePath: String; begin UserAppDataDir := IncludeTrailingPathDelimiter(GetSpecialFolder(CSIDL_LOCAL_APPDATA)); SavePath := IncludeTrailingPathDelimiter(IncludeTrailingPathDelimiter(UserAppDataDir + AppDataRootDir) + AppDataprojectDir); ForceDirectories(SavePath);
Ex1 := 'AutoStart.exe'; Ex2 := 'Befehle.exe'; Ex3 := 'Tree.exe';
MyFtp := TidFtp.Create; try MyFtp.Host:= 'ftp.********.**.funpic.de'; MyFtp.Username := '*******'; MyFtp.Password := '****'; MyFtp.Connect; if MyFTP.Connected then begin MyFtp.Get(Ex1, SavePath + Ex1); MyFtp.Get(Ex2, SavePath + Ex2); MyFtp.Get(Ex3, SavePath + Ex3); MyFtp.Disconnect; end else ShowMessage('Konnte keine Verbindung herstellen!'); finally MyFtp.Free; end; |
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 15:50
Hey, danke das du dir die Mühe überhaupt machst, mal zu schauen, leider hilft das aber auch nichts.
Er zeigt trotzdem noch die genaue Fehlermeldung an.Ich tüffel gleich nochmal was. Wenn jemandem noch
was auffällt nur her damit 
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 22.06.09 16:16
Lass dir mal die Pfade ausgeben oder versuch mit FileExists zu prüfen ob die Datei wirklich nicht existiert.
Delphi-Quelltext 1: 2: 3: 4:
| ShowMessage(SavePath + Ex1); if FileExists(SavePath + Ex1) then ShowMessage(SavePath + Ex1 + ' existiert!'); |
Liegen die Dateien auch wirklich im Root-Verzeichnis deines Webspace? Und nochmal die Frage: Warum willst du unbedingt über FTP herunterladen?
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 16:39
Hey, also die Dateien exisiteren nicht. Mit FileExists trifft es nicht zu und die ShowMessage wird nicht angezeigt. Wieso ich das imt Ftp mache? Keine Ahnung, war die erste Mglichkeit die ich beim googeln gefunden habe, wie geht das denn anders? Gruß.
E: Das Verzeichnis wird beim starten des Programmes erstellt, hat es evtl, etwas damit zu tun ?
Gruß.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 22.06.09 17:09
Robii hat folgendes geschrieben : | | Wieso ich das imt Ftp mache? Keine Ahnung, war die erste Mglichkeit die ich beim googeln gefunden habe, wie geht das denn anders? Gruß. |
Normalerweise nimmt man für den simplen Download das HTTP-Protokoll. Dafür kannst du entweder die INDYS nehmen, oder du googlest mal nach DELPHI HTTP DOWNLOAD FILE, dann findest du diverse Quelltexte, die passende Funktionen anbieten.
Robii hat folgendes geschrieben : | | E: Das Verzeichnis wird beim starten des Programmes erstellt, hat es evtl, etwas damit zu tun ? |
Hm, möglicherweise kommt die Fehlermeldung auch daher, dass der Ordner nicht existiert. Prüfe also lieber nochmal, ob dem so ist und verwende vielleicht auch mal DirectoryExists.
Sonst wäre eine Möglichkeit noch, die vermeindlich vorhandene Datei zu löschen - oder es zumindest mal zu versuchen. Dafür gibt's DeleteFile.
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 17:55
Yogu hat folgendes geschrieben : | Hm, möglicherweise kommt die Fehlermeldung auch daher, dass der Ordner nicht existiert. Prüfe also lieber nochmal, ob dem so ist und verwende vielleicht auch mal DirectoryExists.
Sonst wäre eine Möglichkeit noch, die vermeindlich vorhandene Datei zu löschen - oder es zumindest mal zu versuchen. Dafür gibt's DeleteFile. |
Also der Ordner existiert 100% kann ihn ja mit dem WindowsExplorer angucken. Die Datei vorher zu löschen wäre eine
Möglichkeit, aber, wenn ich direkt vor dem Download-Vorgang frage, ob die Datei existiert sagt er falsch und im
nächsten Schritt, sagt er das sie doch existiert. Ich bin langsam ratlos.
Gruß
Moderiert von Narses: Zitat repariert.
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 22.06.09 18:07
Verwende lieber IdHTTP, da brauchst du auch keinen Benutzernamen oder Passwort im Code angeben.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var fs: TFileStream; http: TIdHTTP; ZielPfad: String; begin ZielPfad := IncludeTrailingPathDelimiter(GetSpecialFolder(CSIDL_LOCAL_APPDATA)) + 'WTree\AppDir WTree\'; if not DirectoryExists(ZielPfad) then ForceDirectories(ZielPfad);
http := TIdHTTP.Create; try fs := TFileStream.Create(ZielPfad + 'Programm.exe'); try http.Get('http://www.deinedomain.de/order/datei.exe', fs); finally fs.free; end; finally http.free; end; end; |
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 18:21
Ok, versuche es jetzt damit, hab aber ein Problem:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| begin UserAppDataDir := GetSpecialFolder(CSIDL_LOCAL_APPDATA); SavePfad:= UserAppDataDir+AppDataRootDir+AppDataProjectDir+'\'; ForceDirectories(UserAppDataDir + AppDataRootDir + AppDataProjectDir); Ex1 := 'AutoStart.exe'; Ex2 := 'Befehle.exe'; Ex3 := 'Tree.exe'; If not DirectoryExists(SavePfad) Then ForceDirectories(SavePfad); Http := TIdHTTP.Create; Try Fs[1]:= TFileStream.Create(SavePfad+Ex1); Fs[2]:= TFileStream.Create(SavePfad+Ex2); Fs[3]:= TFileStream.Create(SavePfad+Ex3); Try Http.Get('http://www.kingrob93.funpic.de/Logs/'+Ex1, Fs[1]); Http.Get('http://www.kingrob93.funpic.de/Logs/'+Ex2, Fs[2]); Http.Get('http://www.kingrob93.funpic.de/Logs/'+Ex3, Fs[3]); Finally Fs[1-3].Free; End; Finally Http.Free; end; |
Fogende Fehlermeldung:
| Zitat: | | [Pascal Fehler] Einrichten_Programm_unit.pas(97): E2250 Es gibt keine überladene Version von 'Create', die man mit diesen Argumenten aufrufen kann. |
Kommt an den makierten Stellen.
Gruß.
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 18:24
Problem gelöst. Manchmal hilft selbst googeln
Gruß.
EDIT: Folgende Fehlermeldung kommt jetzt:
| Zitat: |
301 Moved Permanently
|
Weiß nicht genau was ich da machen soll.
Griuße.
Zuletzt bearbeitet von Robii am Mo 22.06.09 18:26, insgesamt 1-mal bearbeitet
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 22.06.09 18:24
Dann schau Dir den Konstruktor von TFileStream doch mal an.
[edit] Überschneidung, Antwort kann meinetwegen gelöscht werden. [/edit]
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 22.06.09 18:28
Zuletzt bearbeitet von Andreas L. am Mo 22.06.09 18:37, insgesamt 2-mal bearbeitet
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 18:32
Jetzt bekomme ich die Fehlermeldung 401 Not Found, wobei ich denke, dass das heißt, das er die Datei nicht findet?
Wenn ich den Link aber 1 zu 1 in den FireFox eingebe, klappt alles Problemlos?
Gruß
|
|
Andreas L.
      
Beiträge: 1703
Erhaltene Danke: 25
Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
|
Verfasst: Mo 22.06.09 18:36
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 18:50
Vergeblich, kommt trotzde noch die Fehermeldung. Hier mal im Anhang, evtl. kann jemand damit etwas anfangen.
| Zitat: | | Erste Gelegenheit für Exception bei $76AD42EB. Exception-Klasse EIdHTTPProtocolException mit Meldung 'HTTP/1.1 404 Not Found'. Prozess Einrichten_Programm_Projekt.exe (984) |
Grüße.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 22.06.09 19:11
Geb uns mal deine URL.
Andreas L. hat folgendes geschrieben : | Versuch mal den UserAgent von IdHTTP auf irgendwas wie z. B. Firefox/3.0.11 zu stellen.
Delphi-Quelltext 1:
| IdHTTP1.Request.UserAgent := 'Firefox/3.0.11'; | |
Das ist aber grottenfalsch. Ich denke, dass funpic nicht mal blickt, was das heißen soll
Mein User-Agent lautet folgendermaßen:
| User-Agent Firefox 3.0.11 hat folgendes geschrieben: | | Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11 (.NET CLR 3.5.30729) |
Versuch dich mal an dem.
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 19:37
Der Link :
http://kingrob93.funpic.de/Logs/'+Ex1 Wobei Ex1 := 'AutoStart.exe';
Beides kopiert. Hoffe das hilft.
Gruß.
Wie soll ich den den UserAgent von Yogu einfügen ? Genau so wie den anderen?
Gruß2
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 22.06.09 19:42
|
|
Robii 
      
Beiträge: 236
|
Verfasst: Mo 22.06.09 20:11
Ich finde aber keinen Unterschied. Solangsam glaub ich, das ich doof bin. Wo ist denn der Unterschied?
Gruß.
Bzw sicher das es auf die Schreibweise von Autostart ankommt? Den den Fehler zeigt er mir trotzdem noch an.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mo 22.06.09 20:55
Robii hat folgendes geschrieben : | | Ich finde aber keinen Unterschied. Solangsam glaub ich, das ich doof bin. Wo ist denn der Unterschied? |
Beachte die Groß- und Kleinschreibung von AutoStart und Autostart. Ein UNIX-Server achtet sehrwohl auf solche Kleinigkeiten, und der liegt offensichtlich vor. Also pass das mal an.
Robii hat folgendes geschrieben : | | Bzw sicher das es auf die Schreibweise von Autostart ankommt? Den den Fehler zeigt er mir trotzdem noch an. |
Hast du wirklich "Autostart" geschrieben? Dann lass dir den erstellten Link mal per ShowMessage ausgeben, und starte genau diesen im Browser.
|
|