Q&A

  • tnmftp에 관련된 질문..
안녕하세요...
현재.. ftp를 이용하여 프로그램을 자동업데이트하는 모듈을 개발중입니다.

개발하면서보니.. 궁금한것이 너무 많아.. 이렇게 고수님들에게 도움을 요청합니다.

ftp 서버가.. 윈도우 2000인데.. 디렉토리 목록스타일을 Unix로 선택하여야 ParseList가 통하더군요...
Ms-Dos를 선택해도 ParseList형식으로 목록을 가져오는 방법은 없는지..

Unix 디렉토리 목록스타일을 선택하여 작업하다보니...
디렉토리와 파일 구분은 attribute로 해결하였는데...
파일날짜 부분에서 막혔거든요..

제가 구현하는 것은 로컬 파일날짜와 리모트 파일날짜를 비교하는것인데...
어떻게 하면 리모트 파일 일자를 로컬형식과 같은 것으로 변경할수 있는지...
strtodatetime(ftpdirectorylist.modifdate)를 구현해봤는데.. 유효한 날짜,타임형식이 아니라는 메세지를.....

그리고 또.. 혹시 고수님들중에 델파이책중에서 네트워크 관련된 좋은책이 있으시면 추천좀 해주세요...

서점을 몇번씩이나 가봤는데.. 맨날 헛탕만..
부탁드릴게요...
3  COMMENTS
  • Profile
    최용일 2002.05.23 04:03
    안녕하세요. 최용일입니다.

    TFTPDirectoryList.ModifyDate는 디렉토리들의 수정된 날짜가 들어 있는 TStringList입니다. 쉽게 말하면 TFTPDirectoryList에 여러개의 디렉토리들이 들어 있는데 ModifyDate에는 그 디렉토리들의 날짜들이 차례대로 들어 있는거죠.

    StrToDateTime(TFTPDirectoryList.ModifyDate[0]); // 첫번째 디렉토리 수정된 날짜
    StrToDateTime(TFTPDirectoryList.ModifyDate[1]); // 두번째 디렉토리 수정된 날짜
    ...

    파일이름, 크기, 등등... 마찬가지니까 참고하세요...

    ^^ 항상 즐코하세요...

  • Profile
    방석출 2002.05.23 04:56
    안녕하세요..
    우선 님의 답변에 감사드립니다..
    제가 질문을 이상하게 써놨더군요..
    님이 답변하신 것처럼 했었었는데.. 안되어서.. 질문을 올린것이었거든요..

    소스는 아래와 같습니다.

    var
      strlist_name,strlist_size,strlist_attb,strlist_date : TStringList;
      fname,fsize,fattb,fdate,gcurdir: string;
      Rdatetime: Tdatetime;
      Fitem: TlistItem;
      size,tcnt,i: integer;
    begin
      with TFtp do
      begin
        host := '서버명';
        port := 21;
        userid := 't';
        password := 't';

        connect;

        ParseList := True;
        Vendor := NMOS_AUTO;
      end;

      RemoteFIDList := TList.Create
      strlist_name := TStringList.Create;
      strlist_size := TStringList.Create;
      strlist_attb := TStringList.Create;
      strlist_date := TStringList.Create;

      strlist_name.Assign(tftp.FTPDirectoryList.Name);
      strlist_size.Assign(tftp.FTPDirectoryList.Size);
      strlist_attb.Assign(tftp.FTPDirectoryList.Attribute);
      strlist_date.Assign(tftp.FTPDirectoryList.ModifDate);

      tcnt := strlist_name.Count;

      i := 0;

      R_cbPath.Items.Add('/');
      r_cbPath.Text := '/';
      gcurdir := '/';

      while (i < tcnt) do
      begin
        fname := strlist_name.Strings[i];
        fattb := strlist_attb.Strings[i];
        fdate := strlist_date.Strings[i];
        fsize := strlist_size.Strings[i];

        Fitem := Remote_list.Items.Add;

        if fattb[1] = 'd' then
        begin
           Fitem.Caption := ' ' + fname;
           Fitem.ImageIndex := 0;
           Fitem.SubItems.Add('[폴더]');
        end
        else
        begin
           Fitem.Caption := fname;
           Fitem.ImageIndex := 1;
           size := (strtoint(fsize) + 1023) div 1024;
           if Size = 0 then Size := 1;
           Fitem.SubItems.Add(Format('%dKB', [size]));
        end;
        
        //이부분에서 에러가 납니다.
        //유효한 날짜와 시간형식이 아닙니다라는 메세지가..
        Rdatetime :=strtodatetime(fdate));  

        Fitem.SubItems.Add(fdate);
        Fitem.SubItems.Add(fattb);
        i := i + 1;
      end;

      Remote_list.AlphaSort;
      strlist_name.Free;
      strlist_size.Free;
      strlist_attb.Free;
      strlist_date.Free;
    end;


  • Profile
    최용일 2002.05.23 05:27
    날짜를 ShowMessage 로 출력해보세요. 어떠한 형식으로 나오는가... 그 형식에 따라서 파싱을 하시던가 StrToDateTime을 쓰시던가 결정해야 할거 같은데요...