페이지

2010년 5월 14일 금요일

[두루에디트 제작기] FTP 기능편

FTP 디렉토리 목록 보정 절차


-----------------------------------
LIST명령중 어떤 서버는 날짜형식에 따라(한글) 컬럼이 일정하지가 않아 파일명 추출이 힘들다(WinINet도 FtpFindFirstFile 버그)
따라서,잘 잘라야 한다. 이때 날짜와,파일명을 제대로 못가져 오게 되는데 해결방법은 먼저 LIST를 하여 attr, user,owner size까지
파싱한 다음 NLST로 명령을 날려 얻은 결과에서 LIST의 결과에 있는 것을 상대로 맨뒤에서 부터 파일명을 대조하여 가져온다.


그리고,파일날짜는 파일에만 해당되는데 MDTM 파일명을 다시 날려서 날짜를 구한다.
그냥 자르다가는 파일명에 공백이 들어가는 LONGNAME 형식이라 한계가 있다.따라서 두루지기의 이방법을 권고하는 바이다.




절차: 디렉토리 이동시 CWD 후에 PWD 날릴것,


LIST를 날려서 각줄단위 결과를 LIST.linedata에 읽어넣는다.이때,속성,소유자,그룹,파일크기 까지는 각 LIST.attr,LIST.owner,LIST.group,LIST.size에 집어넣는다.
단,파일날짜와 이름부분에 뭔가 컬럼이 삑사리가 나면 needfix = true로 하고 needfixcount ++ 한다.
LIST처리가 끝난 직후,needfixcount > 0 이면 보정 작업에 들어간다.
NLST를 날려 파일명 목록을 구성하고 needfix = true 인것을 대상으로 LIST.linedata에 비교하여 LIST.filename에 때려넣는다.
이 컬럼이 일정치 않은 파일을 상대로 MDTM 을 날려 LIST.filetime 에 때려 넣는다.

■NLST안하고 파싱하는방법 (개선된 방법)

위 방법은 정확하지만, 속도면에서 불리하다.그냥 그렇다고 한글 '일','월'을 집어넣어 하드코딩할 순 없고 아래와 같이 하면 정확하게 끊어 읽을 수 있다. 파일질라도 이런식으로 처리하는 듯하다. 연도만 있는 것들은 파일질라에서도 시간은 공백으로 나오고 있음이다.
UNIX타입은 월 일 시간순이다.
월이 영문이면 원래대로 처리,숫자면 atoi,맨 뒤에 시간이 들어가면 연도는 현재년도로 한다.월자리에 4글자 들어가고.있으면 년/월/일로 처리패시브모드, FTPS,SFTP 순으로 중요하다.

댓글 없음:

댓글 쓰기