Pobranie zawartości pliku z serwera FTP do zmiennej string

Pobranie zawartości pliku z serwera FTP do zmiennej string
AM
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:15
0

Witam,

jak pobrać zawartość pliku z serwera ftp, bez zapisywania go na dysku?
Chodzi mi o mniej więcej takiego :

Kopiuj
zmienna := IdFTP1.Get('plik.txt');
szopenfx
  • Rejestracja:prawie 21 lat
  • Ostatnio:6 miesięcy
1

Jako drugi paramer przeładowanej metody możesz podać strumień np. TMemoryStream.

AM
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:15
0

Nie działa

Kopiuj
[dcc32 Error] Unit3.pas(195): E2010 Incompatible types: 'string' and 'procedure, untyped pointer or untyped parameter'
edytowany 1x, ostatnio: amadro
szopenfx
  • Rejestracja:prawie 21 lat
  • Ostatnio:6 miesięcy
0

U mnie działa. Jakiej wersji indy używasz?

Kopiuj
var
  MS: TMemoryStream;
  StringList: TStringList;  
begin
  StringList := TStringList.Create;
  IdFTP1.Get('file.txt', StringList);
  ShowMessage(StringList.Text);
  StringList.Free;  
end;
AM
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:15
0

Teraz :

Kopiuj
[dcc32 Error] Unit3.pas(197): E2250 There is no overloaded version of 'Get' that can be called with these arguments

XE7, a ty?

szopenfx
  • Rejestracja:prawie 21 lat
  • Ostatnio:6 miesięcy
0

Używam Delphi 7 z INDY 9 oraz Delphi XE2 z INDY 10 i obie wersje pozwalają na dodanie 2 parametru. Pokaż więcej kodu jak to u ciebie wygląda.

AM
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:15
0
Kopiuj
 if FTPEnable then begin
      if DM.IdFTP1.Connected=false then begin    
      try
      FTPUsername:=form1.HTTP1.Get('http://.../settings/FTPUsername.txt');
      FTPPassword:='...,';
      FTPHost:=form1.HTTP1.Get('http://.../settings/FTPHost.txt');
      FTPPort:=StrToInt(form1.HTTP1.Get('http://.../settings/FTPPort.txt'));
      finally
      DM.IdFTP1.Username :=FTPUsername;
      DM.IdFTP1.Password := FTPPassword;
      DM.IdFTP1.Host := FTPHost;
      DM.idftp1.Port:=FTPPort;
        try
          DM.IdFTP1.Connect;
          DM.IdFTP1.ChangeDir('/settings/');
        finally
          
        end;
      end;     
      end;
  StringList := TStringList.Create; 
  DM.IdFTP1.Get('file.txt', StringList);
  ShowMessage(StringList.Text);
  StringList.Free;
 

Kod jest w wątku.

edytowany 1x, ostatnio: amadro
szopenfx
  • Rejestracja:prawie 21 lat
  • Ostatnio:6 miesięcy
3

a tak?

Kopiuj
var
  MS: TMemoryStream;
  StringList: TStringList;  
begin
  StringList := TStringList.Create;
  MS := TMemoryStream.Create;
  try
    IdFTP1.Get('file.txt', MS);
    MS.Position := 0;
    StringList.LoadFromStream(MS);
    ShowMessage(StringList.Text);
  finally
    MS.Free;
    StringList.Free;
  end;
end;

Dodatkowo poczytaj o wyjątkach - źle używasz bloku try..except..finally

//edycja dopisano MS.Position := 0;

edytowany 1x, ostatnio: szopenfx
AM
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:15
0

Niestety nie działa, kod nie wywala już błędu, ale StringList.Text jest równe '' (puste)

szopenfx
A do pliku ci zapisuje poptawną zawartość? sptóbuj jeszcze dać MS.Position := 0 po linijce IdFTP1.Get('file.txt', MS);
AM
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 3 lata
  • Postów:15
0

Działa, bardzo dziękuję za pomoc, jesteś wielki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.