Autor Beitrag
Robii
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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:
ausblenden volle Höhe 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:
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
  // AppData Verzeichnis wird ermittelt
  UserAppDataDir := GetSpecialFolder(CSIDL_LOCAL_APPDATA);
  ForceDirectories(UserAppDataDir + AppDataRootDir + AppDataProjectDir);
  Ex1 := 'AutoStart.exe';
  Ex2 := 'Befehle.exe';
  Ex3 := 'Tree.exe';
  MyFtp := TidFtp.Create;
  try
    // Verbindung wird hergestellt
    MyFtp.Host:= 'ftp.********.**.funpic.de';
    MyFtp.Username := '*******';
    MyFtp.Password := '****';
    MyFtp.Connect;
    // AutoStart, Befehle & Tree werden heruntergeladen
    MyFtp.Get(Ex1,UserAppDataDir+AppDataRootDir+AppDataProjectDir+Ex1);
    MyFtp.Get(Ex2,UserAppDataDir+AppDataRootDir+AppDataProjectDir+Ex2);
    MyFtp.Get(Ex3,UserAppDataDir+AppDataRootDir+AppDataProjectDir+Ex3);
    // Verbindung wird getrennt
    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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 22.06.09 15:09 
Probiers mal so:
ausblenden volle Höhe 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:
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
  // AppData Verzeichnis wird ermittelt
  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
    // Verbindung wird hergestellt
    MyFtp.Host:= 'ftp.********.**.funpic.de';  //du weißt schon das man solche Werte aus der Exe ganz einfach auslesen kann, oder? Warum lädst du die Dateien nicht per Http herunter?
    MyFtp.Username := '*******';
    MyFtp.Password := '****';
    MyFtp.Connect;
    if MyFTP.Connected then
    begin
      // AutoStart, Befehle & Tree werden heruntergeladen
      MyFtp.Get(Ex1, SavePath + Ex1);
      MyFtp.Get(Ex2, SavePath  + Ex2);
      MyFtp.Get(Ex3, SavePath  + Ex3);
      // Verbindung wird getrennt
    MyFtp.Disconnect;
    end
    else
      ShowMessage('Konnte keine Verbindung herstellen!');
  finally
    MyFtp.Free;
  end;
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
ShowMessage(SavePath + Ex1); //und die anderen auch...

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.06.09 17:09 
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
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 Suche in der Entwickler-Ecke INDYS nehmen, oder du googlest mal nach Suche bei Google DELPHI HTTP DOWNLOAD FILE, dann findest du diverse Quelltexte, die passende Funktionen anbieten.

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Mo 22.06.09 17:55 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconNarses: Zitat repariert.
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 22.06.09 18:07 
Verwende lieber IdHTTP, da brauchst du auch keinen Benutzernamen oder Passwort im Code angeben.
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Mo 22.06.09 18:21 
Ok, versuche es jetzt damit, hab aber ein Problem:
ausblenden 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
  // AppData Verzeichnis wird ermittelt
  UserAppDataDir := GetSpecialFolder(CSIDL_LOCAL_APPDATA);
  SavePfad:= UserAppDataDir+AppDataRootDir+AppDataProjectDir+'\';
  ForceDirectories(UserAppDataDir + AppDataRootDir + AppDataProjectDir);
  Ex1 := 'AutoStart.exe';
  Ex2 := 'Befehle.exe';
  Ex3 := 'Tree.exe';
  // Abfragen, ob Verzeichnis existiert
  If not DirectoryExists(SavePfad)
  Then ForceDirectories(SavePfad);
  Http := TIdHTTP.Create;
  Try
    Fs[1]:= TFileStream.Create(SavePfad+Ex1); // 
    Fs[2]:= TFileStream.Create(SavePfad+Ex2); // Hier kommt die Fehlermeldung
    Fs[3]:= TFileStream.Create(SavePfad+Ex3); //
    Try
      // Dateien werden heruntergeladen
      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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: Mo 22.06.09 18:24 
Problem gelöst. Manchmal hilft selbst googeln :P
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



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 22.06.09 18:28 
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
Problem gelöst. Manchmal hilft selbst googeln :P
Gruß.

EDIT: Folgende Fehlermeldung kommt jetzt:
Zitat:

301 Moved Permanently


Weiß nicht genau was ich da machen soll.
Griuße.


ausblenden Delphi-Quelltext
1:
http.HandleRedirects := True;					


Ansonsten prüfen ob deine URL korrekt ist.

EDIT: Du brauchst keine 3 TFileStream-Objekte erstellen. Verwende einfach eine For-Schleife.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var
  i: Integer;
  fs: TFileStream;
  Dateiname: String;
begin
  for i := 1 to 3 do
  begin
    case i of
      1: Dateiname := 'Autostart.exe'
      2: Dateiname := 'Befehle.exe';
      3: Dateiname := 'Tree.exe'
    end;

    fs := TFileStream.Create(Pfad + Dateiname, fmCreate);
    try
      //herunterladen
    finally
      fs.free;
    end;
  end;
end;


Zuletzt bearbeitet von Andreas L. am Mo 22.06.09 18:37, insgesamt 2-mal bearbeitet
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mo 22.06.09 18:36 
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
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ß


Vielleicht blockiert funpic den Request. Versuch mal den UserAgent von IdHTTP auf irgendwas wie z. B. Firefox/3.0.11 zu stellen.

ausblenden Delphi-Quelltext
1:
IdHTTP1.Request.UserAgent := 'Firefox/3.0.11';					
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.06.09 19:11 
Geb uns mal deine URL.

user profile iconAndreas L. hat folgendes geschrieben Zum zitierten Posting springen:
Versuch mal den UserAgent von IdHTTP auf irgendwas wie z. B. Firefox/3.0.11 zu stellen.

ausblenden 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 :P

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.06.09 19:42 
Du hast einen Schreibfehler drin :roll:

kingrob93.ki.funpic.de/Logs/AutoStart.exe gibt's nicht.
kingrob93.ki.funpic.de/Logs/Autostart.exe dagegen schon.

Mach was raus ;)
Robii Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.06.09 20:55 
user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconRobii hat folgendes geschrieben Zum zitierten Posting springen:
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.