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

如何讀取資料夾內的pdf檔?

答題得分者是:senso
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-02-01 16:15:30 IP:59.120.xxx.xxx 訂閱
請教各位大大:
如何讀取資料夾內所有的圖檔及子資料夾內的
圖檔,我目前只能固定一個路徑而已,小弟我想在父資
料夾內的所有子資料夾都讀取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]

------
努力往往是甘苦的!!一起勉勵
編輯記錄
nokib2002 重新編輯於 2011-02-01 01:17:46, 註解 無‧
nokib2002 重新編輯於 2011-02-01 01:18:35, 註解 無‧
nokib2002 重新編輯於 2011-02-01 01:19:19, 註解 無‧
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-02-10 09:46:29 IP:61.219.xxx.xxx 訂閱
問題說明不清楚
你是要把不同目錄的pdf filename放在TreeView的同一個節點下?
然後點節點開啟父資料夾下 [某個資料夾] 的裡的檔案?

你可以把fullfilename存在Node->Data裡
或用TSearchRec去找目錄名,再一個個找檔名...

編輯記錄
senso 重新編輯於 2011-02-09 19:24:11, 註解 無‧
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-02-10 12:44:00 IP:59.120.xxx.xxx 訂閱
Senso你好:
抱歉,我把我的問題再說明清楚點~目前我把我要的pdf圖檔放在一個
父資料夾裡面,但是我不能做子資料夾把pdf 檔做分類,因為我讀取不到檔案
,我想要做子資料夾來分類,
而又能讓讀取到資料.不知道前輩有看懂了嗎??
~謝謝你的幫忙~~




------
努力往往是甘苦的!!一起勉勵
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-02-10 13:56:39 IP:61.219.xxx.xxx 訂閱
越來越看不懂要幹麻了

到底是因為讀不到檔案才無法分類子資料夾?
還是作了子資料夾分類但沒有存目錄所以讀不到檔案?

反正結果就是要
父資料夾 / 子資料夾 / 檔案
不是嗎?

nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-02-10 17:22:03 IP:59.120.xxx.xxx 訂閱
senso你好:
我的問題是你的第二個回答..
(還是作了子資料夾分類但沒有存目錄所以讀不到檔案?)
我就是做了子資料夾分類,而讀不到檔案,
~謝謝~
------
努力往往是甘苦的!!一起勉勵
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-02-11 09:10:30 IP:61.219.xxx.xxx 訂閱
所以麻...跳針回到#2

沒目錄就再建的時候寫入存在Node->Data裡,再拿出來用

不想存目錄就改用TSearchRec去找父資料夾下的目錄,再一個個找檔名...


另..目錄的結構及名稱和treeview的一樣嗎?
編輯記錄
senso 重新編輯於 2011-02-10 18:17:18, 註解 無‧
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-03-03 14:05:29 IP:59.120.xxx.xxx 訂閱
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-03-03 17:43:30 IP:61.219.xxx.xxx 訂閱
本來以為你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 重新編輯於 2011-03-03 02:44:25, 註解 無‧
senso 重新編輯於 2011-03-03 02:46:39, 註解 無‧
senso 重新編輯於 2011-03-03 02:48:59, 註解 無‧
senso 重新編輯於 2011-03-03 02:50:55, 註解 無‧
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-03-04 08:39:24 IP:59.120.xxx.xxx 訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2011-03-04 18:00:06 IP:61.219.xxx.xxx 訂閱
放TreeView1Change就可以了吧
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#11 引用回覆 回覆 發表時間:2011-03-08 12:34:03 IP:59.120.xxx.xxx 訂閱
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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2011-03-08 15:52:19 IP:61.219.xxx.xxx 訂閱
我用我自己測的資料夾路徑可以跑
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?

編輯記錄
senso 重新編輯於 2011-03-08 01:04:03, 註解 無‧
senso 重新編輯於 2011-03-08 01:06:45, 註解 無‧
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#13 引用回覆 回覆 發表時間:2011-03-09 07:57:44 IP:59.120.xxx.xxx 訂閱
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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2011-03-16 09:37:57 IP:59.120.xxx.xxx 訂閱
Senso前輩你好:
可否傳給我你這程式的壓縮檔,我還是想不出來
如何把整個程式碼寫到TreeView1Chang 裡面
謝謝你的支援~ 小弟感激不盡
------
努力往往是甘苦的!!一起勉勵
系統時間:2017-12-17 18:01:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!