Q&A

  • IdFTP사용해서 파일 다운받기
Indy를처음 사용해봅니다.

초보에다가 Indy도 처음사용해보고 아무튼 막히는게 너무 많습니다.

ftp서버에 접속하여 파일 버젼을 체크한 후 버젼이 틀리면 다운 받는 프로그램을 구현하려고하는데요. 그래서 간단히 테스트를 하는 프로그램을 만들어보았습니다.

그런데 한번은 실행이 되는데 두번째 실행을 하면 이런 에러가 납니다.
'Access violation at address 00526F48 in module 'coreide60.bpl' Read of address 000000B4'
그리고 ok를 누르면 또 에러 한번 더
'Access violation at address 007E032C in module 'vcl60.bpl' Write of address 00000018/'
이런 에러가 나고 프로그램을 실행되지 않습니다. 그런데 컴파일된 실행파일ㅇ은 몇번이건 실행이 됩니다. 왜 그렇죠? 소스는 다음과 같습니다.

procedure Tfrm_download.Button1Click(Sender: TObject);
begin
  IdFTP1.Host := '000.000.000.000';
  IdFTP1.User := 'username';
  IdFTP1.Password := 'password';

  if IdFTP1.Connected = false then
  begin
    try
      IdFTP1.Connect;
    except
      showmessage('에러!');
    end;
  end;

  if IdFTP1.Connected = True then
  begin
    try
    showmessage(inttostr(IdFTP1.Size('Demo.zip')));
    except
    showmessage('안된다!');
    end;
    IdFTP1.Get('Demo.zip', 'C:Demo.zip', True);
    showmessage('successful!');
  end;
end;

procedure Tfrm_download.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  if IdFTP1.Connected = true then
  begin
    IdFTP1.Disconnect;
    IdFTP1.Free;
  end;
end;


잘못된 이유도 좀 설명 부탁드립니다. 소스에서 잘못된 부분도 지적해주시고요. 프로그레스바와 함께 파일을 다운 받는 상태를 표현해주는 방법도 조언을 해주시면 감사하겠습니다.
1  COMMENTS
  • Profile
    오병주 2003.03.22 21:07
    안녕하세요...델탐 입니다.

    서버쪽의 경로가 없는듯 싶군요...

    이건 제가 강의실에 올린 내용이거든요...

    보시면 이해하시리라 믿어여..^^

    참고하세요...

    Function FA_NMFTP(NMFTP :TNMFTP):boolean;
    begin
      NMFTP.Host       := '';            <===== 호스트 IP주소
      NMFTP.TimeOut := 20000;      
      NMFTP.UserID    := '';             <===== 호스트 ID
      NMFTP.Password:= '';            <====== 호스트 패스워드

      try
        NMFTP.Connect;
      except
        On E:Exception do
        begin
           ShowMessage ('서버 연결에 실패하였습니다.');
           Result := False;
           exit;
        end;
      end;

      Result := True;
    end;

    이렇게 일단 서버에 Connect를 합니다.

    그런다음 서버의 특정 폴더에서 가지고 오면 되겠져...^^

    file_name은 조합해서 만들거나 먼저 알고 있겠죠...^^
    if FA_NMFTP(NMFTP_Dir) = true then             // 서버연결후 디렉토리 검사 목적...
        begin
          NMFTP_Dir.ChangeDir(Dir_name);  <--- Dir_name는 서버에 이미지가 위치하고 있는 경로 입니다.
          Try  
    //       그런 다음 서버에서 그림파일을 C:Jpg_temp  요 폴더에 화일을 가지고 옵니다.
           NMFTP_Dir.Download(file_name,  'c:Jpg_temp' + file_name);
    //     그런 다음 디렉토리을 바꿔주고...
           SetCurrentDir('c:Jpg_temp');
    //    그림 파일이 JPG이기 때문에 Jpeg를 열어 놓습니다.
           JPEGIMAGE := TJPEGImage.Create;
           try
             JPEGIMAGE.LoadFromFile(file_name);
             Image1.Picture.Graphic := JPEGIMAGE;
             Image1.Stretch := True;
           finally
             JPEGIMAGE.Free;
           end;

         except
            On E:Exception do
            begin
              with image1 do
              begin
                Left := 0;
                Width := 1047;
              end;
              Qr_null.Caption := '그림 파일이 존재하지 않습니다..!';
            end;
          end;
    end;
    end;