全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1548
推到 Plurk!
推到 Facebook!

開發FTP Client程式

答題得分者是:RaynorPao
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-15 00:56:52 IP:211.76.xxx.xxx 未訂閱
最近想寫個FTP Client端程式,但是不知道該用Indy IdFTP還是NMFTP。 一開始先用NMFTP,但是想寫某些東西的時候只有IdFTP才有我要的功能;當我改成IdFTP的時候,發現更麻煩的問題,要List Server端的檔案目錄的時候他是以TStringList的型式儲存檔案目錄列表,還要分析字串才可以把檔名、檔案大小等...分析出來。 而且還有一個問題是,如果遠端的目錄或是檔案名稱有空白字元,List出來的檔名會只有空白以後的字串,我也不知道該如何解決。我有參考站上的文章了,但是還是沒有解決我的問題。請問各位在寫FTP軟體的時候是用哪一種呢?謝謝
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-15 10:22:17 IP:203.73.xxx.xxx 未訂閱
引言: 最近想寫個FTP Client端程式,但是不知道該用Indy IdFTP還是NMFTP。 一開始先用NMFTP,但是想寫某些東西的時候只有IdFTP才有我要的功能;當我改成IdFTP的時候,發現更麻煩的問題,要List Server端的檔案目錄的時候他是以TStringList的型式儲存檔案目錄列表,還要分析字串才可以把檔名、檔案大小等...分析出來。 而且還有一個問題是,如果遠端的目錄或是檔案名稱有空白字元,List出來的檔名會只有空白以後的字串,我也不知道該如何解決。我有參考站上的文章了,但是還是沒有解決我的問題。請問各位在寫FTP軟體的時候是用哪一種呢?謝謝 < face="Verdana, Arial, Helvetica">
GGL 你好:
(1)其實問題只是在如何 Parser 字串,請參考以下的範例程式碼
   IdFTP3->Host=FTP_SERVER;
   IdFTP3->Username=FTP_USERNAME;
   IdFTP3->Password=FTP_PASSWORD;
   IdFTP3->Connect(true, 3000);
   TStringList *sl1=new TStringList;
   IdFTP3->List(sl1, "*", true);
   for(int i=0; iCount; i++)
   {
      AnsiString sz0="";
      AnsiString sz1="";
      AnsiString sz2="";
      AnsiString sz3="";
      if(sl1->Strings[i].Trim()!="")
      {
         AnsiString szPrev=sl1->Strings[i].SubString(1, 38);
         TStringList *sl2=new TStringList;
         AnsiString szTemp=StringReplace(szPrev, " ", ",", TReplaceFlags()<CommaText=szTemp;
         int iIndex=0;
         for(int j=0; jCount; j++)
         {
            if(sl2->Strings[j].Trim()!="")
            {
               if(iIndex==0)
               {
                  sz0=sl2->Strings[j].Trim();
               }
               else if(iIndex==1)
               {
                  sz1=sl2->Strings[j].Trim();
               }
               else if(iIndex==2)
               {
                  sz2=sl2->Strings[j].Trim();
               }
               iIndex++;
               if(iIndex>=3) break;
            }
         }
         AnsiString szNext=sl1->Strings[i].SubString(39, sl1->Strings[i].Length()-38);
         sz3=szNext.Trim();
         delete sl2;
      }
      Memo1->Lines->Add(sz0+", "+sz1+", "+sz2+", "+sz3);
   }
   sl1->SaveToFile("sl1.txt");
   delete sl1;
   IdFTP3->Disconnect();
(2)以上的範例程式碼只 Parser FTP 根目錄的檔案目錄結構,如果要再繼續往
   下層分析,則必須改成遞迴的方式
(3)這篇文章中的做法也已經改變,請你再重新下載一次
   >
< class="code">
如何中斷下載或上傳的動作
http://delphi.ktop.com.tw/topic.php?topic_id=45723
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/06/15 22:29:18
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-15 13:55:03 IP:211.76.xxx.xxx 未訂閱
謝謝RaynorPao,我已經弄出來解析檔案、檔案大小等等...只是還來不及po上來,你已經幫我找到答案了,謝謝了...
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-15 18:33:45 IP:211.76.xxx.xxx 未訂閱
以下是FTP下載時候的程式碼,為什麼當我在下載檔案的時候要等到整個檔案下載完畢視窗才會有動作,不然都會好像當掉一樣,而且這樣需要等到檔案下載完畢才可以下載第二個,無法同時下載,一直無法解決,我去看INDY Demo的程式碼也沒什麼不一樣的地方,我也不清楚該怎麼辦,謝謝了
   TListItem *dowload_file;
   dowload_file=ListView1->Items->Add();
   dowload_file->Caption=ListView2->Selected->Caption;
   dowload_file->SubItems->Add(IdFTP1->Host);
   dowload_file->SubItems->Add("");
   dowload_file->SubItemImages[1]=3;
   dowload_file->SubItems->Add(IdFTP1->Size(ListView2->Selected->Caption));
   dowload_file->SubItems->Add("");
   IdFTP1->Get(ListView2->Selected->Caption,ListView2->Selected->Caption,false,true);
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-15 22:47:47 IP:211.76.xxx.xxx 未訂閱
謝謝了.. 原來是在IdFTP1WorkBegin跟IdFTP1Work加入Application->ProcessMessages(); 總算是解決這個問題了,只是視窗好像會有點lag 發表人 -
系統時間:2024-05-16 22:45:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!