일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- xml
- MySQL
- PostgreSQL
- Firebird
- 셋업
- SDK
- 파라미터
- Delphi
- dll
- winsock
- Visual Basic
- 초보
- 파이어버드
- Visual Studio 2005
- c#
- MFC
- WIN32 SDK
- SQL
- 소니
- 델파이
- 데이터베이스
- 설치
- 시리얼 통신
- vb
- 입문
- 인스톨
- 문자열
- VB.NET
- 기초
- 예제
- Today
- Total
프로그래밍 노트
[델파이] TIdFTP로 FTP 클라이언트 만들기 본문
TIdFTP로 FTP 클라이언트를 만드는데 여러번 삽질을 했다.
자료가 많이 있거나 샘플이 어디 있는지 알면 좋았겠지만
내 검색 능력으로는 잘 검색되지 않아서 나름 고생했다.
■ FTP 서버 접속
// ftpCt: TIdFTP; 폼에서 선언
ftpCt.Host := edtHost.Text;
// 기본 FTP 포트를 사용하는 경우, 설정 안해도 됨
ftpCt.Port := StrToInt(edtPort.Text);
// Anonymous(익명)로 접속하는 경우 아래와 같이 설정
ftpCt.Username := 'anonymous';//edtId.Text;
// 익명 접속일 경우 패스워드 설정할 필요 없음
//ftpCt.Password := edtPass.Text;
// FTP 서버에 접속
ftpCt.Connect;
■ FTP 서버에서 파일 리스트 가져오기
파일 리스트를 가져오는 방법은 두가지가 있다.
파일명이나 폴더명을 가져오는 방법과
파일명의 속성같은 정보를 한번에 가져오는 방법이 있다.
물론 파일 리스트를 가져오기전에 FTP를 접속해야된다.
* 파일명만 가져오는 방법
slFile := TStringList.Create;
try
// FTP 폴더를 바꾸는 방법
ftpCt.ChangeDir('/');
// 파일명만 가져오기
// 선택된 폴더의 파일 리스트를 TStringList파일에 저장한다.
ftpCt.List(slFile, '', false);
// 저장된 리스트를 리스트 박스에 추가
for i := 0 to slFile.Count - 1 do
lstFolder.Items.Add(slFile.Strings[i]);
finally
slFile.Free;
ftpCt.Quit;
end;
ftpCt.Disconnect;
* 파일속성까지 가져오는 방법
try
ftpCt.ChangeDir('/');
// 선택된 폴더의 파일 리스트(속성 포함)를
// DirectoryListing에 자료를 저장
ftpCt.List(nil);
// 리스트에 저장한 값 리스트박스에 추가
for i := 0 to ftpCt.DirectoryListing.Count -1 do
begin
// 디렉토리(ditDirectory )인지 파일(ditFile)인지 구분
if ftpCt.DirectoryListing.Items[i].ItemType = ditDirectory then
sFile := ftpCt.DirectoryListing.Items[i].FileName ; // 파일이름
// 리스트박스에 추가
lstAtt.Items.Add(sFile);
end;
finally
ftpCt.Quit;
end;
ftpCt.Disconnect;
★여기서 중요한 것이 있다.
FTP서버가 윈도우즈 계열인 경우, 파일 속성까지 가져오려해도(ftpCt.List(nil))
리스트를 제대로 가져오지 못한다.
FTP서버가 윈도우즈 계열인 경우에는 uses에서 IdFTPListParseWindowsNT를
추가해주어야지만 제대로 리스트를 가져올 수 있다.
이것을 몰라서 하루종일 해맸다.
■ FTP 서버에서 지정한 파일 가져오기
FTP에서 파일을 클라이언트로 카피하기
// FTP가 연결되어있는가
if ftpCt.Connected then
begin
try
// 파일이 있는 폴더 설정
sFolder := '/'+ lstFolder.Items.Strings[lstFolder.ItemIndex];
// FTP 서버에 있는 파일명
sSrcFile := lstFile.Items.Strings[lstFile.ItemIndex];
// 클라이언트 컴퓨터에 카피할 파일명
sTrgFile := 'c:\' + lstFile.Items.Strings[lstFile.ItemIndex];
ftpCt.TransferType := ftASCII;
// 폴더 바꾸기
ftpCt.ChangeDir(sFolder);
// FTP 서버에서 파일 가져오기
ftpCt.Get(sSrcFile, sTrgFile, true);
finally
ftpCt.Quit;
end;
■ 참고사항
위 소스를 돌리기 위해서는 밑의 클래스들을
uses에 추가해야된다.
uses
IdFTP, IdFTPCommon, IdFTPListParseWindowsNT, IdFTPList;
---------- ---------- ---------- ---------- ----------
파일을 업로드할 때는 Put 함수를 사용함
Put(컴퓨터 안의 파일 풀패스, FTP 서버의 풀 패스)