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

請問FTP中刪除資料夾的一個問題

尚未結案
qubeley2004
一般會員


發表:52
回覆:71
積分:24
註冊:2004-07-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-23 17:11:16 IP:211.76.xxx.xxx 未訂閱
void __fastcall TForm1::deldirClick(TObject *Sender) { int i; AnsiString sPath,sTemp; sPath="";        for(i=0;i<=ListBox1->Items->Count-1;i++){ if(ListBox1->Selected[i]) { sTemp=ListBox1->Items->Strings[i]; if((StrRScan(sTemp.c_str(),'/'))||(sTemp=="..")) {if(StrRScan(sTemp.c_str(),'/')) { sPath=ListBox1->Items->Strings[i]; sPath.Delete(sPath.Length(),sPath.Length()); } else sPath=".."; break; } else {MessageDlg("Àɮ׿ï¾Ü:"+ListBox1->Items->Strings[i],mtInformation,TMsgDlgButtons()<RemoveDir(sPath); ListBox1->Clear(); ListBox1->Items->Add(".."); NMFTP1->List(); MessageDlg("FTP ¥Ø¿ý," sPath ",¤w¸g³Q§R°£¤F",mtInformation,TMsgDlgButtons()<SimpleText="ª¬ªp:FTP ¥Ø¿ý" sPath "¤w¸g³Q§R°£";} else MessageDlg("¥Ø¿ý¨S¦³³Q¿ï¾Ü",mtError,TMsgDlgButtons()<
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-26 08:48:12 IP:219.132.xxx.xxx 未訂閱
qubeley2004你是參考
揭開互助社群軟體Napster的秘密-Internet與
TCP/IP進階程式設計with C   Builder 黃嘉輝 文魁
第五章的範例
這只是範例程式光是他引用
void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing)
{
    String sList, sTemp ;
    sList = Trim(StrRScan(Listing.c_str(), ' ')) ;
StrRscan就無法代出含空格的目錄。
另外遠端的權限你是足夠,
還有一般而言要先刪除目錄下的檔案後才可以刪除目錄。
希望你能明確表達出錯誤訊息!    
Andy Chang
------
Andy Chang
qubeley2004
一般會員


發表:52
回覆:71
積分:24
註冊:2004-07-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-26 13:03:04 IP:211.76.xxx.xxx 未訂閱
嗯,我是看那本來自習的 不過就是沒有辦法刪除..雖然我有自己建立空的資料夾 可是還是沒有辦法刪除,是不會出現錯誤訊息,就是變的沒有刪除而已 就算是他的範例也是不能刪除 再問能推薦其他的書可以學習bcb的應用程式的嗎??
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-26 14:57:30 IP:219.132.xxx.xxx 未訂閱
qubeley2004你好:
void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing)
{
    String sList, sTemp ;
    sList = Trim(StrRScan(Listing.c_str(), ' ')) ;
    sTemp = "" ;        if (StrPos(Listing.c_str(), sTemp.c_str()))
    {
        ListBox1->Items->Add(sList   "/") ;
    }
    else
    {
        ListBox1->Items->Add(sList) ;
    }
}
一例中依據C++的範例有可能顯示如下的結構:
-rwxrw-rw- 1 root  root   349996 May  6  2003 Stamping and Chassis Factory_2.pdf (檔案)
drwxrw-rw- 1 root  root        0 May  6  2003 _private (目錄)
如使用NMFTP1->Nlist();
僅顯示檔案或目錄名稱,
Stamping and Chassis Factory_2.pdf (檔案)
_private (目錄)
所以此範例程式因再其上對目錄加上"/"但不一定判斷出是目錄。
建議先引用C++範例的NList瞧瞧你的遠端目錄是如何顯示,再進行修改。    
或改成Indy,本園地範例很多。
    
Andy Chang
------
Andy Chang
qubeley2004
一般會員


發表:52
回覆:71
積分:24
註冊:2004-07-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-26 16:14:11 IP:211.76.xxx.xxx 未訂閱
void __fastcall TForm1::deldirClick(TObject *Sender) { int i; AnsiString sPath,sTemp; sPath="";        for(i=0;i<=ListBox1->Items->Count-1;i++){ if(ListBox1->Selected[i]) { sTemp=ListBox1->Items->Strings[i]; if((StrRScan(sTemp.c_str(),'/'))||(sTemp=="..")) {if(StrRScan(sTemp.c_str(),'/')) { sPath=ListBox1->Items->Strings[i]; sPath.Delete(sPath.Length(),sPath.Length()); } else sPath=".."; break; } else {MessageDlg("檔案選擇:"+ListBox1->Items->Strings[i],mtInformation,TMsgDlgButtons()<RemoveDir(sPath); ListBox1->Clear(); ListBox1->Items->Add(".."); NMFTP1->List(); MessageDlg("FTP 目錄," sPath ",已經被刪除了",mtInformation,TMsgDlgButtons()<SimpleText="狀況:FTP 目錄" sPath "已經被刪除";} else MessageDlg("目錄沒有被選擇",mtError,TMsgDlgButtons()<Items->Strings[i],mtInformation,TMsgDlgButtons()<
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-26 18:05:02 IP:219.132.xxx.xxx 未訂閱
qubeley2004請仔細看程式流程
  MessageDlg("File select: "   ListBox1->Items->Strings[i], mtInformation, TMsgDlgButtons() << mbOK, 0);
  return ;
是指當選擇檔案被判斷非資料夾時返回不再執行下面
if (sPath != "..")   {的動作
而sPath=""一定會執行if (sPath != "..")的動作
NMFTP1->RemoveDir(sPath);刪除一個空目錄結果我都不敢想。    你可以另外拉一個ListBox2於
void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing)
{
ListBox1->Items->Add(Listing);
看看顯示為何?    
強烈建議改成Indy,本園地範例很多。

Andy Chang
------
Andy Chang
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-26 21:33:12 IP:219.132.xxx.xxx 未訂閱
你可以另外拉一個ListBox2於 void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing) { ListBox1->Items->Add(Listing); 看看顯示為何? 紅字應該為 ListBox2->Items->Add(Listing); Andy Chang
------
Andy Chang
qubeley2004
一般會員


發表:52
回覆:71
積分:24
註冊:2004-07-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-27 21:49:00 IP:211.76.xxx.xxx 未訂閱
引言:
qubeley2004請仔細看程式流程
  MessageDlg("File select: "   ListBox1->Items->Strings[i], mtInformation, TMsgDlgButtons() << mbOK, 0);
  return ;
是指當選擇檔案被判斷非資料夾時返回不再執行下面
if (sPath != "..")   {的動作
而sPath=""一定會執行if (sPath != "..")的動作
NMFTP1->RemoveDir(sPath);刪除一個空目錄結果我都不敢想。    你可以另外拉一個ListBox2於
void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing)
{
ListBox1->Items->Add(Listing);
看看顯示為何?    
強烈建議改成Indy,本園地範例很多。

Andy Chang
拉另外一個Listbox結果跑出屬性..我自己弄得空資料夾是 drwxr-xr-x MessageDlg("File select: " ListBox1->Items->Strings[i], mtInformation, TMsgDlgButtons() << mbOK, 0); return ; 關於這一行..可是要刪除的確實是空的資料夾呀< > 結果後面的都沒有執行了...是否小弟誤會您的意思了< >
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-28 09:03:07 IP:219.130.xxx.xxx 未訂閱
qubeley2004:
顯然你並沒有一直去分析及判斷這個程式,我現在依這程式修正一下你試一試看,注意紅字部分
.hpp
public:                // User declarations
    __fastcall TForm1(TComponent* Owner);
    void __fastcall HandleExceptions(TObject *Sender, Exception *E); 
.cpp
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  // 設定exception handler.自定義異常處理窗口
  Application->OnException = HandleExceptions;
‧‧‧
void __fastcall TForm1::HandleExceptions(TObject *Sender, Exception *E)
{
  if (E->Message.Length())
  {
    Screen->Cursor = crArrow;
    AnsiString errorstr="應用程序發生了錯誤.\n" E->Message;
    Application->MessageBox(errorstr.c_str(),"發生異常",MB_OK);
  }
}
將NMFTP1ListItem副程式改成這樣
void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing)
{
    String sList=Listing, sTemp ;
    int Space_Add;
    for (int i=0;i<8;i  ) {
    if (sList.Pos(" ")) {
      Space_Add=sList.Pos(" ");
      sList=Trim(sList.SubString(Space_Add,sList.Length()-Space_Add 1));
    }
  }
  if (Listing.SubString(1,1)=="d")
    sList  = "/" ;
  ListBox1->Items->Add(sList) ;
}
將程式裡所有sPath.Delete(sPath.Length(), sPath.Length()) ;
改成sPath = sPath.SubString(1,sPath.Length()-1);
將ListBox1的ListBox1DblClick事件中
void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
{
  ListBox1->Enabled=false; //加入
‧‧‧
  ListBox1->Enabled=true; //加入
}
  請再試試看!
Andy Chang
------
Andy Chang
qubeley2004
一般會員


發表:52
回覆:71
積分:24
註冊:2004-07-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-07-28 17:56:18 IP:211.76.xxx.xxx 未訂閱
感謝您熱心的回答 結果是可以執行的 是的..小弟之前確實沒有很仔細的去看之前的程式 因為很疑惑的是在資料夾的目錄後面會加上"/"...可是在此行 if((StrRScan(sTemp.c_str(),'/'))||(sTemp=="..")) 的判斷下有加上"/"的資料夾判斷卻一直判斷為非資料夾所以導致沒有刪除.. 所以只有看此階段的程式碼 原來在nmftp那邊也要修改... 請問為什麼for迴圈那邊是小於8呢?? 發表人 - qubeley2004 於 2004/07/28 18:00:30
系統時間:2024-04-29 3:10:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!