Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

FTP & INDY   Найти похожие ветки 

 
stepan_mk   (2005-08-05 11:19) [0]

DELPHI7
INDY10
есть такой код
 
...
var s:TstringList;
...
BEGIN
...
if ftp.Connected
  then
   begin
   s:=TStringList.Create;
    ftp.List(s);
...



На комаде list получаю ошиПку Index out of bounds(0)
ПРОЧЕМУ? И как сделать чтоб не возникала?


 
stepan_mk   (2005-08-05 12:32) [1]

пропобал и так писать
...
BEGIN
...
if ftp.Connected
 then
  begin
   ftp.List;
...
ОшиПка та же


 
Alexander Panov ©   (2005-08-05 13:13) [2]

stepan_mk   (05.08.05 12:32) [1]

TIdFtp - событийно-зависимый компонент. Следовательно, выполнять некоторое действие(в данном случае List), надо по наступлению некоторого события.
У тебя это событие - OnConnect(либо подобное).
Подробнее см. в справке.


 
stepan_mk   (2005-08-05 14:10) [3]

У меня пере етим есть Connect, Get, и ещё куча кода.
А потом ели надо то ищется нужний файл в директории


 
Alexander Panov ©   (2005-08-05 14:31) [4]

Вот пример. Правда Инди версии 9. Но думаю, что тут отличий не должно быть.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

var
 WM_FTPEndGetFile: Cardinal;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 public
   procedure MyWndProc(var Message: TMessage);
 end;

var
 Form1: TForm1;

implementation

uses uSimpleGetFTP;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Enabled := False;
 TSimpleGetFTP.Create("ftp.almar.net.ru","!readme.txt","!readme.txt",Handle,WM_FTPEndGetFile);
end;

procedure TForm1.MyWndProc(var Message: TMessage);
begin
 if Message.Msg = WM_FTPEndGetFile then
 begin
     Button1.Enabled := True;
     case Message.WParam of
     0: ;
     1: ;
     2: ;
     100: Memo1.Lines.Assign(TStringList(Message.LParam));
     end;
     Message.Result := 0;
     Exit;
 end;
 WndProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.Title := Self.Caption;
 WM_FTPEndGetFile := RegisterWindowMessage(PChar(Application.Title+IntToStr(Application.Handle)));
 WindowProc := MyWndProc;
end;

end.


unit uSimpleGetFTP;

interface

uses
 Classes, Windows,IdBaseComponent, IdComponent, IdTCPConnection,
 IdTCPClient, IdFTP, IdFTPCommon;

type
 TSimpleGetFTP = class(TThread)
 private
   FHandle: THandle;
   FMessage: Cardinal;
   FFTP: TIdFtp;
   FUrl,FSrcFile,FDestFile: String;
 protected
   procedure Execute; override;
 public
   constructor Create(const aURL, aFile, aDestFile: String; aHandle: THandle; IdMessage: Cardinal);
   destructor Destroy; override;
 end;

implementation

constructor TSimpleGetFTP.Create(const aURL, aFile, aDestFile: String; aHandle: THandle; IdMessage: Cardinal);
begin
 inherited Create(True);
 FreeOnTerminate := True;
 FUrl := aUrl;
 FSrcFile := aFIle;
 FDestFIle := aDestFIle;
 FHandle := aHandle;
 FMessage := idMessage;
 Resume;
end;

destructor TSimpleGetFTP.Destroy;
begin
 FFtp.Free;
 inherited;
end;

procedure TSimpleGetFTP.Execute;
var
 Err: Cardinal;
 List: TStringList;
begin

List := TStringList.Create;
try
 FFtp := TIdFtp.Create(nil);
 FFtp.Host := FUrl; //+";";
 FFtp.Password := "aaa@aaa.aaa";
 FFtp.Username := "Anonymous";
 FFtp.TransferType := ftBinary;
 FFTp.Passive := True;
 Err := 0;

 try
   if Err=0 then FFTP.Connect;
 except
   Err := 1;
 end;

 try
   if Err=0 then
   begin
//      FFtp.ChangeDirUp;
//      FFtp.ChangeDir("/pub/farplugins/");
     FFtp.List(List);
     SendMessage(FHandle,FMessage,100,Integer(List));
   end;
 except
   Err := 3;
 end;

 try
   if Err=0 then FFTP.Get(FSrcFile,FDestFile,True,False);
 except
   Err := 2;
 end;

 try
   FFTP.Disconnect;
 except
 end;
 SendMessage(FHandle,FMessage,Err,0);
finally
 List.Free;
end;
end;

end.


 
stepan_mk   (2005-08-05 14:59) [5]

1. Не врубился что означает
SendMessage(FHandle,FMessage,100,Integer(List));
2. На Indy 9 у меня всё пахало.


 
Alexander Panov ©   (2005-08-06 17:32) [6]

stepan_mk   (05.08.05 14:59) [5]
1. Не врубился что означает
SendMessage(FHandle,FMessage,100,Integer(List));


Так организована передача результата из одного потока в другой(основной). Передается ссылка на TStringList.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.043 c
14-1130237928
Empleado
2005-10-25 14:58
2005.11.20
FAQ для JAVA?


2-1130664807
John Doe
2005-10-30 12:33
2005.11.20
Перевод из String в дату


14-1130749100
Opilki_Inside
2005-10-31 11:58
2005.11.20
Интеграция Help-файлов с приложением


2-1131264952
злобная танька
2005-11-06 11:15
2005.11.20
TMethod


14-1130399289
boriskb
2005-10-27 11:48
2005.11.20
Ходорковский





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский