인디클라이언트의 idftp를 이용해 파일을 전송하며 현재 얼만큼 전송되었는지 알고 싶습니다.
전송중에 프로그래스바를 만들기 위해서입니다.
파일을 서버에 전송하는것은 기본적으로 여러개의 함수를 제공하는것 같던데 어떤 함수를 써야하는지 현재 얼만큼 전송했는지는 어떻게 아는지 알고 싶습니다.
무식하게 파일을 정해진 바이트만큼 잘라서 올리며 계산하려니 일반 ftp서버로 전송하기에는 프로토콜을 알아야 할거 같아서
인디에서 혹시 기본으로 제공하는건 없는지 무슨 방법이 있는지
조언 부탁드립니다.
파일을 올릴때 OnWorkBegin, OnWork, OnWorkEnd를 이용하면 되더군요.
아래는 샘플입니다.
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute; // 파일선택
Edit1.Text := OpenDialog1.FileName;
IdFTP1.Host := Edit3.Text;
IdFTP1.Username := Edit4.Text;
IdFTP1.Password := Edit5.Text;
IdFTP1.Connect;
IdFTP1.Put(Edit1.Text, Edit2.Text, False); // Edit2에는 미리 파일명을 넣음
end;
procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
ProgressBar1.Max := AWorkCountMax; // 전송시작시 프로그래스바 Max를 설정함
end;
procedure TForm1.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
ProgressBar1.Position := ProgressBar1.Max; // 전송완료시 프로그래스바 Position을 끝으로
end;
procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
Application.ProcessMessages;
ProgressBar1.Position := AWorkCount; // 전송중에 여기서 프로그래스바의 Position을 증가시킴
end;