同目錄逐步讀取不同檔名長度的檔案 |
答題得分者是:Stallion
|
popsbt
一般會員 發表:5 回覆:2 積分:1 註冊:2004-05-28 發送簡訊給我 |
各位先進好:
小弟目前有遇到一個問題.就是要在同目錄底下讀取全部的檔案.有試過FindFirst()與FindNext()這兩個函式. 可以全部讀取進來.不過因為我的資料夾裡面的檔案名稱長度不一樣長(例:IM1,IM2...IM10,IM11...IM100,IM101...IM125) 所以讀取進來之後順序會依檔名逐步讀取至最長長度之後才又跳回.有點類似遞迴.(例:IM1,IM10,IM100,IM101,IM102...IM109,IM11,IM110,IM111...IM119,IM12...IM125...IM13,IM14...IM19,IM2,IM20...) 所以請問各位先進這種情況要如何解決?不更改檔名長度為相同的情況下. 先感謝您熱心的回答. |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
你使用API來搜尋檔案,而API是依照檔名的ASCII碼的字元值來搜尋排列!而你卻想依照檔案後的位數長短不一的「編號值」來依序搜尋排列!在這種需求下,如果不把檔名命名先正規化,我不曉得還有什麼辦法?
===================引 用 popsbt 文 章=================== 各位先進好: 小弟目前有遇到一個問題.就是要在同目錄底下讀取全部的檔案.有試過FindFirst()與FindNext()這兩個函式. 可以全部讀取進來.不過因為我的資料夾裡面的檔案名稱長度不一樣長(例:IM1,IM2...IM10,IM11...IM100,IM101...IM125) 所以讀取進來之後順序會依檔名逐步讀取至最長長度之後才又跳回.有點類似遞迴.(例:IM1,IM10,IM100,IM101,IM102...IM109,IM11,IM110,IM111...IM119,IM12...IM125...IM13,IM14...IM19,IM2,IM20...) 所以請問各位先進這種情況要如何解決?不更改檔名長度為相同的情況下. 先感謝您熱心的回答. |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
你好,
直接用api可能沒辦法處理,不過偏門的方法應該有不少。我舉一個"黑箱"的方式你參考… 1/依序把讀進來的檔名字串做處理,如IM10,就把IM的部份去掉,留下10這個字串,然後把字串10轉成數值放入數值容器中(如 int array等)。 2/ 於是你就有一個存放所有檔名後面數值t的容器,這時候你可利用自己的排序法,或是用你所選的容器的排序法讓裡面的值排序一下。 3/ 用loop把值一個一個取出並轉成字串,如: 10 這個數值變成10字串,然後再自行在10字串前加入"IM"字串。 4/於是你就得到一個完整的檔名,然後再開始進行讀取。 以上是個概念,你應該可以加強或修改成你需要的。當然,應該還有不少好方法可以"黑箱作業"。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
1.方法很聰明!可是有缺陷!
(1)如果目錄下檔案很多,經過這個方法光整理檔案就不知道要耗時多久? (2)恐怕無法即時反映目錄內的檔案增減變化,就算可以,按照檔案收錄排序的方式,整個陣列清除與排序要隨時重作一次! 2.建議還是想辦法先將檔名正規化為宜,請參考~ ===================引 用 aftcast 文 章=================== 你好, 直接用api可能沒辦法處理,不過偏門的方法應該有不少。我舉一個"黑箱"的方式你參考… 1/依序把讀進來的檔名字串做處理,如IM10,就把IM的部份去掉,留下10這個字串,然後把字串10轉成數值放入數值容器中(如 int array等)。 2/ 於是你就有一個存放所有檔名後面數值t的容器,這時候你可利用自己的排序法,或是用你所選的容器的排序法讓裡面的值排序一下。 3/ 用loop把值一個一個取出並轉成字串,如: 10 這個數值變成10字串,然後再自行在10字串前加入"IM"字串。 4/於是你就得到一個完整的檔名,然後再開始進行讀取。 以上是個概念,你應該可以加強或修改成你需要的。當然,應該還有不少好方法可以"黑箱作業"。 |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
stallion兄果然厲害,一眼就看出程式的弱處。
謝謝幫忙把所舉的例子的小缺點寫出來。 在舉例前就知道有那麼些小問題,而比較重要的是"即時性"的問題,但就看取捨了。 有些時候為了要防極少數的情形而付出數倍的資源是不合效益的。當然某些要極精準的系統就不得不注意。 正規化是好方法,是根本的解決辦法。但是若因某些原因而"不能"去改動原程式檔名時就沒辦法了。 至於程序處理上的時間問題,我想正規化檔名也要不少時間,還好的是目前的cpu等硬體的速度應該不會有太大的感受。 另外,正規化的過程中也是會有比較輕微一點的即時問題… 總之,我想還有不少的更好的方法、完美的方法。在這裡只能啟發性的提個"偏門"解決法,並不能代表是最後的答案囉!
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |