列出某目錄底下所有子目錄及檔案是用findfirst,findnext及遞回呼叫,請問能不用遞回呼叫來完成嗎? |
答題得分者是:jow
|
vbkiller
一般會員 發表:65 回覆:28 積分:18 註冊:2007-03-13 發送簡訊給我 |
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
覺得很怪,就是遞迴比較簡單,所以才用遞迴?
你與常人不同喔 ~ 當然,可以不用遞迴,但是複雜度是超過線性關係的成長喔!你要考慮掌握得來嗎? 同時,如果你連遞迴都看不懂,非遞迴的,我想,你可以不用想了,鐵定看不懂 先把遞迴學好,是比較快解決你問題的方式 ===================引 用 vbkiller 文 章=================== 列出某目錄底下所有子目錄及檔案常常是用findfirst,findnext及遞回呼叫來完成,請問能不用遞回呼叫來完成嗎?因為我比較看不懂遞回呼叫,及遞回呼叫後程式流程到那裡. |
vbkiller
一般會員 發表:65 回覆:28 積分:18 註冊:2007-03-13 發送簡訊給我 |
syntax大你好:
大概5,6年前,我曾藉由呼叫windows unit之Reg api以列示出 HKEY_LOCAL_MACHINE之下之子機碼及非子機碼之資料(字串或二進位或dword或多字串或可擴充字串),結果成功列示出來,我覺得機碼之架構很類似子目錄及檔案,故才會提出這問題,所以我認為應該可用我以前寫法 列示子目錄及檔案,但我認為在檔案目錄方面較難做到是api回傳資料之問題,因為在Reg api有一api可回傳子機碼數及非子機碼數,但findfirst 似乎無法做到這樣,故就像syntax大說得,真得很難不用遞迴呼叫以達成列示子目錄及檔案. ps:列示 HKEY_LOCAL_MACHINE之下之子機碼及非子機碼之資料是想要知道安裝程式後被新增什麼子機碼及非子機碼之資料 ===================引 用 syntax 文 章=================== 覺得很怪,就是遞迴比較簡單,所以才用遞迴? 你與常人不同喔 ~ 當然,可以不用遞迴,但是複雜度是超過線性關係的成長喔!你要考慮掌握得來嗎? 同時,如果你連遞迴都看不懂,非遞迴的,我想,你可以不用想了,鐵定看不懂 先把遞迴學好,是比較快解決你問題的方式 ===================引 用 vbkiller 文 章=================== 列出某目錄底下所有子目錄及檔案常常是用findfirst,findnext及遞回呼叫來完成,請問能不用遞回呼叫來完成嗎?因為我比較看不懂遞回呼叫,及遞回呼叫後程式流程到那裡. |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
嗯,不知道你有沒有追蹤過那個 API,或許該 API 內幫你用遞迴完成工作了
不過 Reg 是一種資料庫,我想用索引來處理的機會比較高吧! 遞迴比較接近人類思考方式,所以比較好用,但缺點是,速度不是最快,同時還要確認,堆疊夠用 ===================引 用 vbkiller 文 章=================== syntax大你好: 大概5,6年前,我曾藉由呼叫windows unit之Reg api以列示出 HKEY_LOCAL_MACHINE之下之子機碼及非子機碼之資料(字串或二進位或dword或多字串或可擴充字串),結果成功列示出來,我覺得機碼之架構很類似子目錄及檔案,故才會提出這問題,所以我認為應該可用我以前寫法 列示子目錄及檔案,但我認為在檔案目錄方面較難做到是api回傳資料之問題,因為在Reg api有一api可回傳子機碼數及非子機碼數,但findfirst 似乎無法做到這樣,故就像syntax大說得,真得很難不用遞迴呼叫以達成列示子目錄及檔案. ps:列示 HKEY_LOCAL_MACHINE之下之子機碼及非子機碼之資料是想要知道安裝程式後被新增什麼子機碼及非子機碼之資料 ===================引 用 syntax 文 章=================== 覺得很怪,就是遞迴比較簡單,所以才用遞迴? 你與常人不同喔 ~ 當然,可以不用遞迴,但是複雜度是超過線性關係的成長喔!你要考慮掌握得來嗎? 同時,如果你連遞迴都看不懂,非遞迴的,我想,你可以不用想了,鐵定看不懂 先把遞迴學好,是比較快解決你問題的方式 ===================引 用 vbkiller 文 章=================== 列出某目錄底下所有子目錄及檔案常常是用findfirst,findnext及遞回呼叫來完成,請問能不用遞回呼叫來完成嗎?因為我比較看不懂遞回呼叫,及遞回呼叫後程式流程到那裡. |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[code delphi] procedure TForm1.Button1Click(Sender: TObject); procedure GetFileList(Dir: string; L: TStringList); var S: string; F: TSearchRec; DirList: TStringList; begin if L = nil then EXIT; DirList := TStringList.Create; try DirList.Add(Dir); while DirList.Count > 0 do begin Dir := DirList[0]; DirList.Delete(0); if FindFirst(Dir '\*.*',faAnyFile,F) = 0 then repeat if (F.Name <> '.') and (F.Name <> '..') then begin S := Dir '\' F.Name; if F.Attr and faDirectory = faDirectory then DirList.Insert(0,S) else L.Add(S); end; until FindNext(F) <> 0; FindClose(F); end; finally FreeAndNil(DirList); end; end; var t: Cardinal; L: TStringList; begin L := TStringList.Create; try t := GetTickCount; try GetFileList('C:\TEMP',L); finally ShowMessage(IntToStr(GetTickCount-t)); end; ListBox1.Items.Text := L.Text; finally FreeAndNil(L); end; end; [/code] [code delphi] procedure TForm1.Button2Click(Sender: TObject); procedure GetFileList(Dir: string; L: TStringList); var S: string; F: TSearchRec; begin if L = nil then EXIT; if FindFirst(Dir '\*.*',faAnyFile,F) = 0 then repeat if (F.Name <> '.') and (F.Name <> '..') then begin S := Dir '\' F.Name; if F.Attr and faDirectory = faDirectory then GetFileList(S,L) else L.Add(S); end; until FindNext(F) <> 0; FindClose(F); end; var t: Cardinal; L: TStringList; begin L := TStringList.Create; try t := GetTickCount; try GetFileList('C:\TEMP',L); finally ShowMessage(IntToStr(GetTickCount-t)); end; ListBox1.Items.Text := L.Text; finally FreeAndNil(L); end; end; [/code] 謹供參考... ===================引 用 vbkiller 文 章=================== 列出某目錄底下所有子目錄及檔案常常是用findfirst,findnext及遞回呼叫來完成,請問能不用遞回呼叫來完成嗎?因為我比較看不懂遞回呼叫,及遞回呼叫後程式流程到那裡. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |