如何讀取資料夾內的pdf檔? |
答題得分者是:senso
|
nokib2002
一般會員 發表:22 回覆:48 積分:14 註冊:2009-08-09 發送簡訊給我 |
請教各位大大:
如何讀取資料夾內所有的圖檔及子資料夾內的 圖檔,我目前只能固定一個路徑而已,小弟我想在父資 料夾內的所有子資料夾都讀取pdf檔,下列是小弟固定 圖檔的路徑:簡單來說小弟想要把相關的pdf檔分類在 一子資料夾內,可是這樣就讀取不到了,因為路徑不一樣, 我應該怎麼辦!! 謝謝 [code cpp] void __fastcall TService_1::TreeView1Change(TObject *Sender, TTreeNode *Node) { // 判斷是否有Child Nodes, 若有則不觸發事件. //if (((TTreeView*)Sender)->Selected->Count) return; // 從選取的Node得知檔名 AnsiString szFileName = ((TTreeView*)Sender)->Selected->Text; // 得到圖的完整路徑 szFileName = "D:\\T資料\\ 圖檔\\" szFileName ".pdf"; // 載入圖片 Service_1->Pdf1->src = szFileName; } 請在此區域輸入程式碼 [/code]
------
努力往往是甘苦的!!一起勉勵 |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
|
nokib2002
一般會員 發表:22 回覆:48 積分:14 註冊:2009-08-09 發送簡訊給我 |
|
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
|
nokib2002
一般會員 發表:22 回覆:48 積分:14 註冊:2009-08-09 發送簡訊給我 |
|
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
|
nokib2002
一般會員 發表:22 回覆:48 積分:14 註冊:2009-08-09 發送簡訊給我 |
senso你好:
我存放目錄的結構及名稱和treeview的結構是不同的,但是 我treeview的最後node和目錄中的檔名一樣,即顯示pdf圖出來! 如果我運用我的程式碼,加入TSearchRec,我要怎麼加進去,謝謝 (以下是我的找檔案名的程式碼,) [code cpp] // 從treeview選取的Node得知檔名 AnsiString szFileName = ((TTreeView*)Sender)->Selected->Text; // 得到圖的完整路徑 szFileName = "D:\\Thomas資料\\ 111\\" szFileName ".pdf"; // 載入圖片 Service_1->Pdf1->src = szFileName; 請在此區域輸入程式碼 [/code] ===================引 用 senso 文 章=================== 所以麻...跳針回到#2 沒目錄就再建的時候寫入存在Node->Data裡,再拿出來用 不想存目錄就改用TSearchRec去找父資料夾下的目錄,再一個個找檔名... 另..目錄的結構及名稱和treeview的一樣嗎?
------
努力往往是甘苦的!!一起勉勵
編輯記錄
nokib2002 重新編輯於 2011-03-02 23:36:17, 註解 無‧
|
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
本來以為你add treenode的時候就知道路徑了,才想說直接放在Data
[code cpp] AnsiString f1="fullfilenmae"; TTreeNode *tmpNode=TreeView1->Items->AddObject(NULL,"test",f1.c_str()); ShowMessage(AnsiString((char*)tmpNode->Data)); [/code] 沒有的話還是直接找吧, 用兩層TSearchRec,先找主資料夾下的所有資料夾 然後在一個一個找裡面的檔案 我不確定你檔案會不會中間或更下層資料夾,有的話就自己先看看會不會改吧 [code cpp] AnsiString SearchFile(AnsiString FileName) { TSearchRec sr1,sr2; AnsiString MainDir="D:\\Thomas資料"; AnsiString FullFileName=""; if (FindFirst(MainDir "\\*", faDirectory, sr1) == 0) //找到第一個符合路徑及屬性的目錄 { do { if ((sr1.Attr & faDirectory) == sr1.Attr) //比對屬性符不符合 { AnsiString FullFileName = MainDir "\\" sr1.Name "\\" FileName; if (FindFirst(FullFileName, faArchive, sr2) == 0) //找到第一個符合路徑及屬性的檔案 { do { if ((sr2.Attr & faArchive) == sr2.Attr) //比對檔案屬性符不符合 { FindClose(sr2); FindClose(sr1); return FullFileName; } } while (FindNext(sr2) == 0); //找到下一個符合路徑及屬性的檔案 FindClose(sr2); } } } while (FindNext(sr1) == 0); //找到下一個符合路徑及屬性的檔案 FindClose(sr1); } return FullFileName; //找不到就是"" } [/code] |
nokib2002
一般會員 發表:22 回覆:48 積分:14 註冊:2009-08-09 發送簡訊給我 |
senso你好:
請問我應該把程式碼放在那裡,是放在TreeView裡面的TreeView1Change嗎? 還是放在其他地方, 謝謝指導 ===================引 用 senso 文 章=================== 本來以為你add treenode的時候就知道路徑了,才想說直接放在Data [code cpp] ?AnsiString f1="fullfilenmae"; ?TTreeNode *tmpNode=TreeView1->Items->AddObject(NULL,"test",f1.c_str()); ?ShowMessage(AnsiString((char*)tmpNode->Data)); [/code] 沒有的話還是直接找吧, 用兩層TSearchRec,先找主資料夾下的所有資料夾 然後在一個一個找裡面的檔案 我不確定你檔案會不會中間或更下層資料夾,有的話就自己先看看會不會改吧 [code cpp] AnsiString SearchFile(AnsiString FileName)?? {??? ? TSearchRec sr1,sr2; ? AnsiString MainDir="D:\\Thomas資料"; ? AnsiString FullFileName=""; ? if (FindFirst(MainDir "\\*", faDirectory, sr1) == 0) //找到第一個符合路徑及屬性的目錄 ? { ??? do ??? { ? if ((sr1.Attr & faDirectory) == sr1.Attr) //比對屬性符不符合 ? { ??? AnsiString FullFileName = MainDir "\\" sr1.Name "\\" FileName; ??? if (FindFirst(FullFileName, faArchive, sr2) == 0) //找到第一個符合路徑及屬性的檔案 ??? { ? do ? { ??? if ((sr2.Attr & faArchive) == sr2.Attr) //比對檔案屬性符不符合 ??? { ? FindClose(sr2); ? FindClose(sr1); ? return FullFileName; ??? } ? } while (FindNext(sr2) == 0);? //找到下一個符合路徑及屬性的檔案 ? FindClose(sr2); ??? } ? } ??? } while (FindNext(sr1) == 0);? //找到下一個符合路徑及屬性的檔案 ??? FindClose(sr1); ? } ? return FullFileName; //找不到就是"" } [/code] ?
------
努力往往是甘苦的!!一起勉勵 |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
|
nokib2002
一般會員 發表:22 回覆:48 積分:14 註冊:2009-08-09 發送簡訊給我 |
Senso你好:
程式碼中是只有如何選擇路徑而已嗎? 是否要和我的程式碼結合,我單compiling你的 程式碼會bug, 謝謝 [code cpp] // 從選取的Node得知檔名 AnsiString FileName = ((TTreeView*)Sender)->Selected->Text; // 得到圖的完整路徑<--改寫你的程式碼 FileName = "D:\\Thomas資料\\標準工時\\" FileName ".pdf"; // 載入圖 Service_1->Pdf1->src = szFileName; 請在此區域輸入程式碼 [/code] ===================引 用 senso 文 章=================== 放TreeView1Change就可以了吧
------
努力往往是甘苦的!!一起勉勵 |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
我用我自己測的資料夾路徑可以跑
D:\\main\\test1\\a.pdf D:\\main\\test2\\b.pdf D:\\main\\test3\\c.pdf 那資料夾(Thomas資料)是你前幾篇寫的~如果路徑不對就改成你的路徑 如果是還有再多一層或更多層資料夾那一定會找不到的阿 因為只有找下一層資料夾下的檔案, 這段function沒多難懂先自己研究一下看不看的懂、會不會改回圈或遞迴找下去 還有bug或錯誤訊息是什麼,不要只講一半,這到底要猜什麼 別跟我說是E2268 Call to undefined function 'SearchFile' 已經寫了function一個傳入參數是檔名FileName然後回傳是FullFileName完整路徑檔名 你覺得能怎麼用? AnsiString szFileName = ((TTreeView*)Sender)->Selected->Text; szFileName = SearchFile(szFileName ".pdf"); 還是你想把整段函式的檢查內容全部寫到TreeView1Change? |
nokib2002
一般會員 發表:22 回覆:48 積分:14 註冊:2009-08-09 發送簡訊給我 |
Senso前輩你好:
我的bug的內容是 [C Error] Service.cpp(300): E2108 Improper use of typedef 'AnsiString' [C Error] Service.cpp(300): E2379 Statement missing ; [C Error] Service.cpp(344): E2316 'c_str' is not a member of 'WideString' [C Error] Service.cpp(483): E2096 Illegal structure operation 我是想把整段函式的檢查內容全部寫到TreeView1Change 你的程式碼,我再研究一下,有問題再請教大大你,謝謝! ===================引 用 senso 文 章=================== 我用我自己測的資料夾路徑可以跑 D:\\main\\test1\\a.pdf D:\\main\\test2\\b.pdf D:\\main\\test3\\c.pdf 那資料夾(Thomas資料)是你前幾篇寫的~如果路徑不對就改成你的路徑 如果是還有再多一層或更多層資料夾那一定會找不到的阿 因為只有找下一層資料夾下的檔案, 這段function沒多難懂先自己研究一下看不看的懂、會不會改回圈或遞迴找下去 還有bug或錯誤訊息是什麼,不要只講一半,這到底要猜什麼 別跟我說是E2268 Call to undefined function 'SearchFile' 已經寫了function一個傳入參數是檔名FileName然後回傳是FullFileName完整路徑檔名 你覺得能怎麼用? AnsiString?szFileName = ((TTreeView*)Sender)->Selected->Text; szFileName = SearchFile(szFileName ".pdf"); 還是你想把整段函式的檢查內容全部寫到TreeView1Change?
------
努力往往是甘苦的!!一起勉勵
編輯記錄
nokib2002 重新編輯於 2011-03-09 21:24:23, 註解 無‧
|
nokib2002
一般會員 發表:22 回覆:48 積分:14 註冊:2009-08-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |