Entwickler-Ecke

Internet / Netzwerk - FTP Download Fehlerhaft


Dude566 - So 31.05.09 14:51
Titel: FTP Download Fehlerhaft
Moin,

ich möchte mit meinem FTP Client natürlich dem Benutzer auch die möglichkeit geben Dateien auf seinen Rechner herunterzuladen, das ganze mache ich ja mit Indy9.
Jetzt habe ich das zuletzt getestet und mir ist aufgefallen er speichert zwar etwas aber es sind leere Dateien, egal ob ich beim SaveDialog die Dateiendung mitangebe oder nicht. Wenn ich z.B. .jpg daran hänge wird es zwar als Bilddatei anerkannt aber sie ist leer, und ohne Endung ist es eine Datei die von keinem Programm geöffnet werden kann.


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:
// Upload & Download
procedure TForm1.UpAndDownload(upload : boolean);
var
   path : string;  // Uploaddateipfad
   i : integer;
   onlinefile : string;   // Downloaddateipfad
begin
if MyFTP.Connected then     // Prüfen ob Verbindung besteht
   begin
     if upload then        // Auf Upload prüfen
        begin
        for i := 0 to FileListBox1.Items.Count-1 do if FileListBox1.Selected[i]
            then path := FileListBox1.Items[i];
        with MyFTP do
             begin
              try
               Put(path, ExtractFilename(path));
               ShowMessage('Upload erfolgreich.');
              except
               ShowMessage('Upload fehlgeschlagen.');
              end;
             end;
        end
     else             // Wenn kein Upload dann Download
         with MyFTP do
              begin
               try
                onlinefile := ListBox1.Items[ListBox1.ItemIndex];
                SaveDialog1.Execute;
                Get(onlinefile, SaveDialog1.FileName, true);
               except
                ShowMessage('Download Fehlgeschlagen.');
               end;
              end;
   ActList;
   end
   else ShowMessage('Sie haben keine Verbindung zu einem Server.');
end;

// Download Button
procedure TForm1.DownloadFileButClick(Sender: TObject);
begin
     UpAndDownload(false); // Download Prozedur wird gestartet
end;


Kann mir einer sagen wo der Fehler liegt, ich habe absolut keine Ahnung was da falsch läuft. :autsch:

Gruß Dude566


jaenicke - So 31.05.09 15:05

Put ist so deklariert:

Delphi-Quelltext
1:
procedure TIdFTP.Put(const ASourceFile: stringconst ADestFile: string = ''const AAppend: Boolean = False);                    
Quelldatei und (falls man den Namen ändern will z.B.) Zieldatei.

Du aber schreibst da den Pfad und den Dateinamen hin. :shock:


Dude566 - So 31.05.09 15:08

Es geht aber um den Download und nicht den Upload du beziehst dich gerade auf Put was bei dem Upload verwendet wird, ich will aber richtig downloaden mit Get.

Hast du da etwas verwechselt?


jaenicke - So 31.05.09 15:45

Also ich habe es gerade einmal getestet. Wenn der Inhalt der ListBox korrekt ist, sollte das eigentlich klappen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  MyIdFtp: TIdFTP;
begin
  MyIdFtp := TIdFTP.Create;
  try
    MyIdFtp.Username := '***';
    MyIdFtp.Password := '***';
    MyIdFtp.Connect('ftp.sj-berlin.de');
    MyIdFtp.ChangeDir('webseiten/updater/updatedemo');
    MyIdFtp.Get('versioninfo''Z:\TEMP\versioninfo.txt');
    MyIdFtp.Disconnect;
  finally
    MyIdFtp.Free;
  end;
Und auch so klappt es:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var
  MyIdFtp: TIdFTP;
begin
  MyIdFtp := TIdFTP.Create;
  try
    MyIdFtp.Username := '***';
    MyIdFtp.Password := '***';
    MyIdFtp.Connect('ftp.sj-berlin.de');
    MyIdFtp.Get('webseiten/updater/updatedemo/versioninfo''Z:\TEMP\versioninfo.txt');
    MyIdFtp.Disconnect;
  finally
    MyIdFtp.Free;
  end;
:nixweiss:
(versioninfo ist eine Datei ohne Dateierweiterung, die mein Autoupdater verwendet.)


Dude566 - So 31.05.09 15:54

Ja aber das ist im Prinzip doch eigentlich das gleiche wie bei mir, nur das ich aus dem aktuellen Verzeichnis downloade wo ich bin da ich ja eine eigene Procedure habe zum Verzeichnis wechseln. Daran kann es doch nicht liegen.


jaenicke - So 31.05.09 16:11

Nachdem ich jetzt einen Blick in den Quelltext geworden habe:
In der ListBox steht nicht nur der Dateiname sondern auch die Dateirechte usw., an Get darfst du aber natürlich nur den Dateinamen übergeben. ;-)

Du würdest es dir einfacher machen, wenn du eine Liste ohne diese Angaben führen würdest bzw. das lieber in eine ListView mit einzelnen Spalten schreiben würdest. ;-)


Dude566 - So 31.05.09 17:24

Gut, ich denke somit haben sich alle Probleme gelöst.