Pobranie zawartości pliku z serwera FTP do zmiennej string

Odpowiedz Nowy wątek
2014-12-30 22:18
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');

Pozostało 580 znaków

2014-12-30 22:30
1

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

Pozostało 580 znaków

2014-12-30 22:35
0

Nie działa

[dcc32 Error] Unit3.pas(195): E2010 Incompatible types: 'string' and 'procedure, untyped pointer or untyped parameter'
edytowany 1x, ostatnio: amadro, 2014-12-30 22:35

Pozostało 580 znaków

2014-12-30 22:38
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;

Pozostało 580 znaków

2014-12-30 22:45
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?

Pozostało 580 znaków

2014-12-30 22:53
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.

Pozostało 580 znaków

2014-12-30 22:56
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.

edytowany 1x, ostatnio: amadro, 2014-12-30 22:57

Pozostało 580 znaków

2014-12-30 23:04

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;

edytowany 1x, ostatnio: szopenfx, 2014-12-30 23:26

Pozostało 580 znaków

2014-12-30 23:16
0

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

A do pliku ci zapisuje poptawną zawartość? sptóbuj jeszcze dać MS.Position := 0 po linijce IdFTP1.Get('file.txt', MS); - szopenfx 2014-12-30 23:18

Pozostało 580 znaków

2014-12-30 23:25
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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