Pobieranie pliku za pomocą TIdFtp – no such file or directory

0

Witam. Siedzę na trywialnym problemem i nie wiem o co chodzi:
FTPGet to komponent z pakietu indy "TIdFtp"

Oto kod:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  SL : TStringList;
begin
  SL := TStringList.Create;

  FTPGet.Host     := 'ftp.*******.pl';
  FTPGet.Username := 'anonymous';
  FTPGet.Port     := 21;
  FTPGet.password := '********';
  FTPGet.Passive  := True;
  FTPGet.TransferType := ftBinary;


  FTPGet.Connect;
  try
    try
      RichEdit1.Lines.Add('połączono');

      RichEdit1.Lines.Add('Katalog: '+FTPGet.RetrieveCurrentDir);
      FTPGet.List(SL,'',true);
      RichEdit1.Lines.Add(SL.Text);

      RichEdit1.Lines.Add('Zmieniam katalog');
      FTPGet.ChangeDir(FTPGet.RetrieveCurrentDir+'licence');
      RichEdit1.Lines.Add('Katalog: '+FTPGet.RetrieveCurrentDir);
      FTPGet.List(SL,'',true);
      RichEdit1.Lines.Add(SL.Text);

      RichEdit1.Lines.Add('Pobieram plik');
      FTPGet.Get('licence.bin','c:\exe\rejestracja\licence.bin',true);
      //FTPGet.Get('/licence.bin','c:\exe\rejestracja\licence.bin',true);
      //FTPGet.Get('licence/licence.bin','c:\exe\rejestracja\licence.bin',true);
      //FTPGet.Get('/licence/licence.bin','c:\exe\rejestracja\licence.bin',true);
      //FTPGet.Get(FTPGet.RetrieveCurrentDir+'/licence.bin','c:\exe\rejestracja\licence.bin',true);
    except
      on E:Exception do RichEdit1.Lines.Add('Błąd:'#13+e.Message);
    end;
  finally
    SL.Free;
    FTPGet.Disconnect;
  end;
end;

Problem polega na tym że nie mogę pobrać pliku bo rzekomo nie istnieje. A jednak jest jak go listuję.

Oto wynik w okienku

połączono
Katalog: /
drwxr-xr-x   4 ftp      ftp          4096 Aug 17 13:24 .
drwxr-xr-x   4 ftp      ftp          4096 Aug 17 13:24 ..
drwx--x--x   2 ftp      ftp          4096 Sep 16  2013 incoming
drwxr-xr-x   2 ftp      ftp          4096 Aug 21 09:40 licence
-rw-r--r--   1 ftp      ftp             6 Jul 17 11:47 welcome.msg

Zmieniam katalog
Katalog: /licence
drwxr-xr-x   2 ftp      ftp          4096 Aug 21 09:40 .
drwxr-xr-x   4 ftp      ftp          4096 Aug 17 13:24 ..
-rw-r--r--   1 ftp      ftp           103 Aug 21 09:40 \licence\licence.bin

Pobieram plik
Błąd:
licence.bin: No such file or directory

Ewidentnie robię jakiś głupi błąd tylko, że go nie widzę.
Proszę o oświecenie, z góry dzięki.

0

O ile pamiętam protokół FTP i to jak działa Indy, to zmieniasz katalog po prostu na konkretny, który występuje w katalogu aktualnym.
Czyli zamiast tak:

FTPGet.ChangeDir(FTPGet.RetrieveCurrentDir+'licence');

powinieneś zrobić tak:

FTPGet.ChangeDir('licence');

Oczywiście upewnij się, że ten katalog rzeczywiście jest na serwerze. Wielkość liter MOŻE mieć znaczenie.

1

Uzyj jakiegos klienta FTP i upewnij sie codo poprawnosci sciezki do pliku. Kodu nie analizowalem, ale pobieznie wyglada ok.

edit: FTP i ChangeDir

0

TotalCommanderem łączę się i plik jest oraz da się go pobrać (uprawnienia są OK).

Jak widać na przykładzie zwracany kod też widzi plik i katalog.
I wielkość liter też jest ok.
Z wchodzeniem do katalogu też nie ma problemu bo po wejściu go listuję i widać wynik.
Widać i katalog i plik, co widać na listingu.

0

Okazało się że problem był z nazwą pliku.
Zadziałało to:

FTPGet.Get('/licence/\licence\licence.bin','c:\exe\rejestracja\licence.bin',true,False);

O dziwo plik nazywał się: "\licence\licence.bin"
pod totalcommanderem natomiast wyświetlało się tylko "licence.bin"

dopiero użycie ścieżki /licence/ oraz nazwy \licence\licence.bin spowodowało że plik się pobrał.
dzięki za zwrócenie uwagi na rzeczy oczywiste ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1