請問FTP中刪除資料夾的一個問題 |
尚未結案
|
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
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()<
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
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 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
qubeley2004你好: void __fastcall TForm1::NMFTP1ListItem(AnsiString Listing) { String sList, sTemp ; sList = Trim(StrRScan(Listing.c_str(), ' ')) ; sTemp = "Andy Chang
------
Andy Chang |
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
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()<
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
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 發送簡訊給我 |
|
qubeley2004
一般會員 發表:52 回覆:71 積分:24 註冊:2004-07-13 發送簡訊給我 |
引言:拉另外一個Listbox結果跑出屬性..我自己弄得空資料夾是 drwxr-xr-x MessageDlg("File select: " ListBox1->Items->Strings[i], mtInformation, TMsgDlgButtons() << mbOK, 0); return ; 關於這一行..可是要刪除的確實是空的資料夾呀< > 結果後面的都沒有執行了...是否小弟誤會您的意思了< >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 |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
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 發送簡訊給我 |
感謝您熱心的回答 結果是可以執行的 是的..小弟之前確實沒有很仔細的去看之前的程式 因為很疑惑的是在資料夾的目錄後面會加上"/"...可是在此行 if((StrRScan(sTemp.c_str(),'/'))||(sTemp=="..")) 的判斷下有加上"/"的資料夾判斷卻一直判斷為非資料夾所以導致沒有刪除.. 所以只有看此階段的程式碼 原來在nmftp那邊也要修改... 請問為什麼for迴圈那邊是小於8呢?? 發表人 - qubeley2004 於 2004/07/28 18:00:30
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |