|
FTP를 거의 다 만들었습니다.
다음과 같은 코드로 접속 했을 때 서버의 디렉토리 내용을 트리뷰에 다 표시되게 하였는데..
시간이 너무 오래 걸립니다. 십분이상 걸리는 듯...ㅠㅠ
알FTP는 빨리 뜨는데 말이죠..
접속 후 트리뷰의 목록이 뜨는데 걸리는 시간을 줄이기 위해서 할 수 있는 방법이 있을까요?
참 IndyFTP를 이용하였습니다.(NMFTP 아님)
void __fastcall TForm2::TreeMade()
{
int j=0;
TTreeNode *cNode, *pNode;
TTreeNode *MyTreeView;
pNode=Form1->TreeView1->Items->Item[0];
MyTreeView=Form1->TreeView1->Items->Item[0]->getFirstChild();
Form1->NMFTP1->ChangeDir(MyTreeView->Text);
TStringList* temp= new TStringList();
AnsiString Line;
AnsiString name;
bool IsDirectory=false;
int i,pa,err=0;
if(Form1->NMFTP1->Connected())
{
while(1)
{
j=0;
IsDirectory=false;
try
{
Form1->NMFTP1->List(temp," ",true);
}
catch(...)
{
err=1;
}
if(err!=1)
{
for(i=0;i<temp->Count;i++)
{
Line = temp->Strings[i];
if(Line[1]=='d')
{
name=GetFileName(Line,&IsDirectory);
Form1->TreeView1->Items->AddChild(MyTreeView,name);
j++;
}
}
}
if(j!=0 && err!=1)
{
pNode=MyTreeView;
MyTreeView=pNode->getFirstChild();
try
{
Form1->NMFTP1->ChangeDir(MyTreeView->Text);
}
catch(...)
{
pa=1;
}
if(pa==1)
{
MyTreeView=pNode->GetNextChild(MyTreeView);
Form1->NMFTP1->ChangeDir(MyTreeView->Text);
pa=0;
}
j=0;
}
else
{
cNode=MyTreeView;
MyTreeView=pNode->GetNextChild(cNode);
if(MyTreeView)
{
Form1->NMFTP1->ChangeDir("..");
Form1->NMFTP1->ChangeDir(MyTreeView->Text);
}
else
{
do
{
cNode=pNode;
pNode=cNode->Parent;
Form1->NMFTP1->ChangeDir("..");
if(!pNode)
break;
MyTreeView=pNode->GetNextChild(cNode);
}while(!MyTreeView);
if(!pNode)
break;
if(Form1->NMFTP1->RetrieveCurrentDir()==iniDir)
break;
Form1->NMFTP1->ChangeDir("..");
Form1->NMFTP1->ChangeDir(MyTreeView->Text);
}
}
err=0;
}
}
delete temp;
}
|