Pobranie zawartości pliku z serwera FTP do zmiennej string

0

Witam,

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

zmienna := IdFTP1.Get('plik.txt');
1

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

0

Nie działa

[dcc32 Error] Unit3.pas(195): E2010 Incompatible types: 'string' and 'procedure, untyped pointer or untyped parameter'
0

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

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

Teraz :

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

XE7, a ty?

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.

0
 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.

3

a tak?

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;

0

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

0

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

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