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

求助!!如何實現文件的查找及替換功能

答題得分者是:RedSnow
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-13 19:28:51 IP:202.101.xxx.xxx 未訂閱
個位大大,小弟需要編寫一個文件目錄操作繫統,要求可以查找指定文件,並且可以將查找齣來的文件有選擇性(類似前麵有checkbox可以選擇)用某一指定文件替換掉個位給點幫助啊!!!!!
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-13 20:41:43 IP:219.137.xxx.xxx 未訂閱
cimgg 您好:    搜尋檔案的功能可參考這個範例:    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=45063 至於要在項目前方加上 CheckBox,可將範例內的 ListView 物件的 Checkboxes 屬性設為 true 即可,剩下的替換動作就交給您自己來處理囉。
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-14 10:51:39 IP:202.101.xxx.xxx 未訂閱
RedSnow : 妳好,謝謝妳的解答,如果小弟希望用一個指定的文件替換查找齣來的文件,那是應該先將這些文件刪除,再復製進去,還是用其他什么棒法,如果是的話,那由于這些文件的目錄都不一樣,怎么記憶這些路徑纔是最可靠的,謝謝!
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-14 13:11:14 IP:218.19.xxx.xxx 未訂閱
cimgg 您好:
引言:希望用一個指定的文件替換查找齣來的文件,那是應該先將這些文件刪除,再復製進去,還是用其他什么棒法,如果是的話,那由于這些文件的目錄都不一樣,怎么記憶這些路徑纔是最可靠的
關於第一個問題,您無需分別作刪除與複製的動作,可以使用像是 CopyFile() 或 CopyFileTo() 這樣的函式來直接複製檔案,不過還是要請您看清楚文件說明,正確的設定旗號 (Flag) 參數,同時也要加上容錯處理 (比如檔案被鎖住無法刪除....等),以免處理結果不符合所需。 關於第二個問題,您可以在搜尋到檔案,並紀錄檔案名稱等資料到 ListView 的當時,將檔案所在路徑一併記錄到 ListView 的 SubItem 內 (增加一個 Column),這樣子應該很可靠的。
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-18 09:38:09 IP:202.101.xxx.xxx 未訂閱
呵呵,今天收到論壇的郵件,詢問是否可以結貼,我想還是再等等吧,這兩天我已經按RedSnow的提示在編寫文件替換功能暸,目前我得程序已經可以實現類似檔案總管的功能暸,目前隻差文件替換還沒有完成,我還沒有想好怎么編寫,小弟繫新手,以前也沒有從事過編程,一些函數的使用還不是很懂,所有感覺特別喫力,感謝論壇所有人的幫助,特別是RedSnow 大大,真的謝謝暸:)
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-18 20:35:02 IP:202.101.xxx.xxx 未訂閱
RedSnow: 您好,又要麻烦你了,我想问一下象下面圖中这样的listview裏麵如何用未選中的文件替換那些選中的,如果文件名都一樣呢,是否也是一樣操作,能否給我詳細點的答復。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-18 20:52:53 IP:219.136.xxx.xxx 未訂閱
引言:又要麻烦你了,我想问一下象下面圖中这样的listview裏麵如何用未選中的文件替換那些選中的,如果文件名都一樣呢,是否也是一樣操作,能否給我詳細點的答復。
我沒有看到什麼耶,可以再描述得詳細些嗎?
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-18 21:00:02 IP:202.101.xxx.xxx 未訂閱
不好意思,圖沒有傳上來,我做的是一個前麵有checkboxes的listview,假如我用查找功能查找文件名一樣的文件,但由于文件由于大小,脩改時間不一等,我要用其中一個軟件將其它的覆蓋,請問我該如何實現,我查暸copyfile,講的不詳細,我還不曉得怎么用,您能幫助我嗎?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-18 21:30:44 IP:219.136.xxx.xxx 未訂閱
CopyFile() 的用法很簡單,請看下列範例與說明:
AnsiString ExistingFile = "newfile.txt";
AnsiString NewFile = "oldfile.txt";    CopyFile(ExistingFile.c_str(), NewFile.c_str(), false);
上例中的動作會將 newfile.txt 覆蓋掉 oldfile.txt,動作執行完畢後,oldfile.txt 檔案名稱不變,內容會與 newfile.txt 相同。 第一個參數是設定準備複製的檔案,也就是準備要拿來覆蓋掉其它檔案的那個檔案。 第二個參數是設定要被覆蓋掉的檔案名稱。 第三個參數設為 true 時,與第二個參數同名的檔案存在時,不進行複製動作,若設為 false,則進行複製,以您描述的需求來看,第三個參數應該設為 false。
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-05-18 21:34:53 IP:202.101.xxx.xxx 未訂閱
多謝RedSnow 我再試試看吧
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-05-18 22:05:50 IP:202.101.xxx.xxx 未訂閱
請問redsnow大大,我該如何錶述被選中的items(checked)請幫忙看看以下代碼:     AnsiString FileName;     OpenDialog1->Title="Copy Files";     if(OpenDialog1->Execute())             {          FileExists(OpenDialog1->FileName);          FileName=OpenDialog1->FileName;          }     while(ListView1->Selected)     {         // File path must be "double Null terminated", so we add '\0' at the end.        if(ListView1->Checkboxes)        {          ListView1->Items->BeginUpdate();          for(int i=0;iCheckboxes->*count;i ) { CopyFile(FileName,ListView1->SubItems->Caption,false); ListView1->Items->EndUpdate(); } } }
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-05-19 20:42:49 IP:202.101.xxx.xxx 未訂閱
请问redsnow大大,这个问题很难吗,刚才问过网友,说我这个程序里面错误很多,我想问一下我怎么表达有多少个文件被选中,怎么表达被选中的文件。谢谢
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-05-19 21:24:39 IP:219.137.xxx.xxx 未訂閱
您那段程序確實錯誤很多,我將其修改如下,您參考一下:
OpenDialog1->Title = "Copy Files";
if (OpenDialog1->Execute()) {
    AnsiString FileName = OpenDialog1->FileName;
    if (FileExists(FileName)) {
        ListView1->Items->BeginUpdate();
        for (int i=0; iItems->Count; i  ) {
            if (ListView1->Items->Item[i]->Checked) {
                CopyFile(FileName.c_str(), ListView1->Items->Item[i]->SubItems->Strings[1].c_str(), false);
            }
        }
        ListView1->Items->EndUpdate();
    }
}
以紅字標示的數字部分您必須修改成您自己存放檔案路徑與名稱的次項目編號。 發表人 - RedSnow 於 2005/05/19 21:28:50
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-05-20 13:48:49 IP:202.101.xxx.xxx 未訂閱
RedSnow大大 我按您所說的試暸一下,程序好像沒有執行,不知道哪裏齣暸問題,能再幫我看看嗎
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-05-20 15:12:29 IP:202.101.xxx.xxx 未訂閱
哦,我知道暸,我沒有把路徑加進去,我再試試看
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-05-21 19:24:08 IP:202.101.xxx.xxx 未訂閱
RedSnow 大大      您看看我这段代码有什么问题,为什么执行的时候会不能正确得到我想要的结果。我希望的是能用一个指定的档案将一个或多个文档替换掉,并且替换以后的文件名等与指定的文件是一致的,而且好像不会动态更新。可是我得到的却是下面的结果,代码如下:  OpenDialog1->Title = "Copy Files";     AnsiString str;    if (OpenDialog1->Execute()){     AnsiString FileName = OpenDialog1->FileName;     if (FileExists(FileName)){         ListView1->Items->BeginUpdate();         for (int i=0; iItems->Count; i++){ str=ListView1->Items->Item[i]->SubItems->Strings[1]+ListView1->Items->Item[i]->Caption; if (ListView1->Items->Item[i]->Checked){ CopyFile(FileName.c_str(),str.c_str(), false); } } ListView1->Items->EndUpdate(); } }
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#17 引用回覆 回覆 發表時間:2005-05-21 19:29:11 IP:219.137.xxx.xxx 未訂閱
cimgg 您好: 我無法看到您貼的圖,是否能重新貼一下? 另外也請您說明一下,您將各個檔案的路徑與名稱存放在那裡 (每個 Item 的 Caption 還是那一個 SubItem)?
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#18 引用回覆 回覆 發表時間:2005-05-23 09:26:31 IP:202.101.xxx.xxx 未訂閱
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#19 引用回覆 回覆 發表時間:2005-05-23 09:57:56 IP:202.101.xxx.xxx 未訂閱
RedSnow 大大 您好,圖我一直傳不上去,不知道什么原因。我做的是一個listview共有5列,依次為文件名、檔案路徑、大小、屬性、脩改日期。假設我用查找檔案的方式髮現我得電腦裏麵共有4個檔案名為“1.ttt”的檔案,但它們可能脩改時間或其它有不同的地方,現在我要用其中指定的一個檔案將另外的檔案替換掉,包括文件名等。我用暸上麵的程式以后執行起來總得不到所要得結果,得到得卻是文件名不對得文件,而且好像listview也不會自動更新。小弟繫新手,您能幫幫我嗎?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#20 引用回覆 回覆 發表時間:2005-05-23 14:20:40 IP:218.19.xxx.xxx 未訂閱
我還是沒辦法看到您貼上來的圖,就連您寫的字樣都是亂碼,無法看懂....,在這種狀況下,我真的不知道該如何幫您找出錯誤?    如果方便的話,您乾脆就將您的程式整個打包上傳到 "會員求助程式檔案上傳區",然後描述一下您的操作步驟,我將程式下載來測試一下,應該能很快就找出問題的,上傳的方式如下: 1. 點選下列連結: http://delphi.ktop.com.tw/post.asp?method=Topic&FORUM_ID=97&CAT_ID=31&Forum_Title=%B7%7C%AD%FB%A8D%A7U%B5%7B%A6%A1%C0%C9%AE%D7%A4W%B6%C7%B0%CF 2. 找到畫面上標示著 "上傳檔案:" 字樣的地方,然後點選其右方標示著 "瀏覽..." 字樣的按紐。 3. 使用一般我們開啟檔案的操作方式來找您電腦上的檔案,點選欲上傳的檔案後點擊選檔視窗上的 "開啟" 按紐。 4. 記得圈選主題分類、程式語言項目的內容,並在主題欄內填上適當文字。 5. 往下找到標示著 "存入新主題" 的按鈕,點擊該按鈕即可。 以上是上傳步驟的簡述,請您仔細瀏覽上傳頁面上的各個項目與標示,以確保我上述的簡述沒有遺漏重要步驟。
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#21 引用回覆 回覆 發表時間:2005-05-23 15:59:01 IP:202.101.xxx.xxx 未訂閱
RedSnow大大 您好,程式我已經上傳勒,地阯是 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=71665,痲煩您去看看。
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#22 引用回覆 回覆 發表時間:2005-05-23 17:24:01 IP:218.19.xxx.xxx 未訂閱
我已經將檔案下載了,但是我使用的是 BCB4,再加上您使用的是簡體中文,因此我無法直接載入測試,我必須用手工方式做些修改與調整後,才能進行測試,目前我將部份簡體中文的部份改成英文與繁體中文,並且另行建立一個專案檔 (.bpr) 之後,現在可以載入檔案了,但仍然無法進行測試,因為下列原因: 1. 您在程式中使用到 MatchesMask() 這個函式,但是我的 BCB4 沒有該檔,之前我在作其他檔案的測試時就已經發現這個問題,我看您是不是試著搜尋一下您的 BCB 目錄,將所有以 Masks.* 為名稱的檔案都上傳一份給我,我看看可否套用到 BCB4 來使用? 2. 您尚未告知您的測試步驟,也就是您在執行程式之後,是進行著什麼樣的操作程序?並且預期的是何種結果?
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#23 引用回覆 回覆 發表時間:2005-05-23 17:59:42 IP:202.101.xxx.xxx 未訂閱
RedSnow大大: 您有更直接的通訊方式嗎,我找到三個mask.*檔案,怎么給您。不知道您有沒有使用oicq這個軟件?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#24 引用回覆 回覆 發表時間:2005-05-23 19:33:18 IP:218.19.xxx.xxx 未訂閱
我沒有使用 OICQ 耶~我有 MSN Messenger 及 Skype、BitWise,都可以傳檔,要不然我看看能不能找到小巧一點的 p2p 傳檔軟體,然後直接對傳。
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#25 引用回覆 回覆 發表時間:2005-05-23 20:03:43 IP:202.101.xxx.xxx 未訂閱
RedSnow大大: 我們用MSN吧,偶的是hxq22@21cn.com,加我吧,等待中!
cimgg
一般會員


發表:21
回覆:30
積分:10
註冊:2005-05-10

發送簡訊給我
#26 引用回覆 回覆 發表時間:2005-05-24 10:32:12 IP:202.101.xxx.xxx 未訂閱
RedSnow大大 您好,很抱歉昨天打擾您的休息,我今天早上試暸一下,髮現可能是我選擇檔案操作的時候沒有選擇好,該檔案復製功能實現起來沒有什么問題。感謝您的幫助!!
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#27 引用回覆 回覆 發表時間:2005-05-24 11:20:30 IP:219.137.xxx.xxx 未訂閱
cimgg 您好: 很高興知道您的問題解決了,恭喜、恭喜~
系統時間:2024-05-17 10:06:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!