C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[14240] [질문]NMFTP에서 List Method에 관해 질문드립니다.(소스 참조)
너나해 [idhunter] 1062 읽음    2002-01-08 16:20
GZ_FTP.zip 43KB 전체 sample source
제가 간단한 FTP program을 만들어보고있는데요
책에 있는 그대로 했는데도 자꾸 error가 발생됩니다.

첨부된 Source대로 해서 사용했을때 접속까지는 문제가 없는데
접속한 이후에 directory를 옮기고싶어서 click을 하면 하위디렉토리 잘 옮겨지구요
다시 하위디렉토리나 아니면 상위디렉토리로 가려고할때 error가 발생합니다.

error는 "Project XXXX.exe raised exception class Exception with message 'A list command is already being processed!'." 라는 message입니다.

간단하게 실행중인 list command가 다시 호출됬다는 것인데요. 그렇다면 어떻게 연결을 끊지않고
reload할수있는지 조언해주시면 감사하겠습니다.

궁극적으로는 저는 remote에 접속해서 해당 directory를 하위 directory포함해서 모두 끌어오는것을
하려는것인데 더 좋은 방법이 있으면 알려주시면 감사하겠습니다.

전체 sample source는 첨부되어있습니다.

//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
     Form1->NMFTP1->UserID = Edit1->Text;
     Form1->NMFTP1->Password = Edit2->Text;
     Form1->NMFTP1->Host = Edit3->Text;

     Form1->NMFTP1->TimeOut = 3000;

     try {

          if( NMFTP1->Connected )
          {
               NMFTP1->Disconnect();
          }
          else
          {
               NMFTP1->Connect();
               if( NMFTP1->Connected )
               {
                    SpeedButton1->Caption = "Disconnect";
                    Memo1->Lines->Add( "Remote Directory " + NMFTP1->CurrentDir );
                    ListBox1->Items->Add( "[..]" );
                    Form1->NMFTP1->List();               <----- 최초 call한 부분
               }
          }
     }
     catch (...)
     {
          NMFTP1->Disconnect();
          ListBox1->Clear();
     }
}

//---------------------------------------------------------------------------
void __fastcall TForm1::NMFTP1Success(TCmdType Trans_Type)
{
     switch( Trans_Type )
     {
          case cmdList:
                         break;

          case cmdChangeDir:
                    Memo1->Lines->Add("ChangeDir successful");
                    NMFTP1->List();                ---> change directory 를 할때마다 재실행되는 부분
                    break;

          case cmdMakeDir:
                    Memo1->Lines->Add("MakeDir successful");
                    break;

          case cmdRemoveDir:
                    Memo1->Lines->Add("RemoveDir successful");
                    break;

          case cmdDelete:
                    Memo1->Lines->Add("Delete successful");
                    break;

          case cmdRename:
                    Memo1->Lines->Add("Rename successful");
                    break;

          case cmdReInit:
                    Memo1->Lines->Add("Reinitialize successful");
                    break;

          case cmdCurrentDir:
//                    Memo1->Lines->Add("CurrentDir successful");
                    break;

     }

}

//---------------------------------------------------------------------------
void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing)
{
     char *List;

     List = Listing.c_str();
     if(( List[0] == '-' ) || ( List[0] == 'd' ) || ( List[0] == 'r' ))
          ListBox1->Items->Add( List );
}


//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
{
     AnsiString     RemoteFile, RemoteDir, sTemp;
     int  Temp;

     RemoteFile = ListBox1->Items->Strings[ ListBox1->ItemIndex ];

     if( RemoteFile.c_str()[0] == 'd' )
     {
          RemoteDir = NMFTP1->CurrentDir + "/"
                    + RemoteFile.SubString( RemoteFile.LastDelimiter( " " ) + 1,
                    RemoteFile.Length() );

          Dis_File( RemoteDir );

          return;
     }

     if( RemoteFile == "[..]" )
     {
          if( NMFTP1->CurrentDir.LastDelimiter( "/" ) == 1 ) return;
          RemoteDir = NMFTP1->CurrentDir.SubString( 1,
                    NMFTP1->CurrentDir.LastDelimiter( "/" ) - 1 );

          Dis_File( RemoteDir );

          return;
     }
}


//---------------------------------------------------------------------------
void __fastcall TForm1::Dis_File( AnsiString rDir )
{
     ListBox1->Clear();
     ListBox1->Items->Add( "[..]" );
     NMFTP1->ChangeDir( rDir );          ---> directory change를 하는 부분

}

+ -

관련 글 리스트
14240 [질문]NMFTP에서 List Method에 관해 질문드립니다.(소스 참조) 너나해 1062 2002/01/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.