線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1578
推到 Plurk!
推到 Facebook!

有關於監控目錄(Monitoring changes in a directory)

尚未結案
apang
一般會員


發表:11
回覆:20
積分:6
註冊:2003-06-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-03 11:21:11 IP:211.23.xxx.xxx 未訂閱
感謝各位看過小弟的問題^^ 目前小弟已可順利的利用 FindFirstChangeNotification 相關方式, 持續 監控特定目錄(directory)內的變化, 目的是在於取得由另一Application 產生的 file 與自己的AP作溝通... 小弟的問題在於, 對於監控目錄做法而言, 除了使用此種方式之外, 是否有其他的做法...因為目前的做法, 需利用一 thread 作 Directory monitoring... 有可能不需動用 thread 嗎? ^^" 小弟學淺, 還請各位先進賜教^^, 謝謝
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-03 12:08:49 IP:210.66.xxx.xxx 未訂閱
用Thread? 我在「c++builder Windows API範例辭典」此書中,有看到相關的範例, 請問你有看過此書嗎?    因為不知道你用的方法是如何?是自己寫的,還是參考此書的??    如果你需要,我可以提供書上的範例給你, 這範例是此書偉大的作者所授權分享的,所以如果你沒看過或有需要的話~ 小弟可以拿出來一起討論 國泰平安
apang
一般會員


發表:11
回覆:20
積分:6
註冊:2003-06-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-03 13:26:29 IP:211.23.xxx.xxx 未訂閱
先謝謝gemi0305 這本書缺貨一陣子了^^"...小弟還無緣拜讀... 我不知書中範例如何作法, 不過因為我的需求是 Application-A 會在任何時候(受到要求)產生特定 file 而我的 AP-B 需要得到這些 file 以作應對的動作 所以才會用到 thread 去對指定目錄作 FindFirstChangeNotification 大概作法片段如下 //......part of header file class TNotificationThread : public TThread { private: TDirNotify *DirNotifyOwner; protected: void __fastcall Execute(); public: __fastcall TNotificationThread (bool CreateSuspended, TObject *Sender); void __fastcall DoChange(void); }; //...... //......part of .cpp file void __fastcall TNotificationThread::Execute() { HANDLE h; BOOL wst; int nf = FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE ; if (DirNotifyOwner->Filter == TNotifyFilters::nfFileName) nf |= FILE_NOTIFY_CHANGE_FILE_NAME; if (DirNotifyOwner->Filter == TNotifyFilters::nfDirName) nf |= FILE_NOTIFY_CHANGE_DIR_NAME; if (DirNotifyOwner->Filter == TNotifyFilters::nfAttributes) nf |= FILE_NOTIFY_CHANGE_ATTRIBUTES; if (DirNotifyOwner->Filter == TNotifyFilters::nfSize) nf |= FILE_NOTIFY_CHANGE_SIZE; if (DirNotifyOwner->Filter == TNotifyFilters::nfLastWrite) nf |= FILE_NOTIFY_CHANGE_LAST_WRITE; if (DirNotifyOwner->Filter == TNotifyFilters::nfSecurity) nf |= FILE_NOTIFY_CHANGE_SECURITY; if (DirNotifyOwner->WatchSubTree) wst = BOOL(1); else wst = BOOL(0); h = FindFirstChangeNotification((DirNotifyOwner->Path).c_str(), wst, nf); if (h == INVALID_HANDLE_VALUE) { //...... } while (!Terminated) { if (WaitForSingleObject(h, 1000) == WAIT_OBJECT_0) { Synchronize(DoChange); if (!FindNextChangeNotification(h)) throw ("Error! Notify to Author!"); } } } 在TNotificationThread::Execute()中會在得知 change notification 時作 Synchronize(DoChange) 已作某動作 所以才動用到thread... 不過該書小弟最近也想買^^, 等貨到吧...
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-03 13:59:21 IP:147.8.xxx.xxx 未訂閱
TurboPower shellshock has a component and demo for monitoring....    http://sourceforge.net/projects/tpshellshock/
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-03 14:07:42 IP:210.66.xxx.xxx 未訂閱
william大哥的網頁我還連不上去,不過我想應該是個不錯的方法~    我先給你書上的範例好了, 他是用timer去檢查的,或許可以參考看看看~
apang
一般會員


發表:11
回覆:20
積分:6
註冊:2003-06-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-03 15:48:45 IP:211.23.xxx.xxx 未訂閱
謝謝 william 的提供, 小弟我會好好尋寶的^^    也謝謝 gemi0305 讓我越想好好讀一下「c++builder Windows API範例辭典」^^"    小弟做法的元件(BCB), 分享各位, 還望指教^^ (不過很久前寫的, 是為了特定目的, 所以不是很完整...) http://delphi.ktop.com.tw/topic.php?TOPIC_ID=38376 不過除了這些做法之外, 不曉得還有沒有別種思考方式ㄋㄟ^^" 或許文章標題改成 [討論]...
apang
一般會員


發表:11
回覆:20
積分:6
註冊:2003-06-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-03 16:01:15 IP:211.23.xxx.xxx 未訂閱
不好意思  小弟上船的檔案沒附說明o_O http://delphi.ktop.com.tw/topic.php?TOPIC_ID=38376 大概使用方法如下 //...元件宣告 TDirNotify *DirNotify1; //... void __fastcall TForm1::Button1Click(TObject *Sender) { DirNotify1->Path = "欲監控的目錄路徑"; \\欲監控的目錄路徑 DirNotify1->WatchSubTree = false; DirNotify1->Filter = FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_FILE_NAME; DirNotify1->OnChange = DirChange; DirNotify1->Enabled = true; } //----------------------------------------------------------------- void __fastcall TForm1::DirChange(TObject *Sender) { ShowMessage("!!"); }
Robinon
一般會員


發表:1
回覆:10
積分:2
註冊:2003-07-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-03 16:49:12 IP:61.66.xxx.xxx 未訂閱
apang你好:           若寫檔的ap不是自己寫的,那目前的做法也無不當之處< > 若兩個 > 若有錯,請各大大指正。 已離題非常抱歉< >
apang
一般會員


發表:11
回覆:20
積分:6
註冊:2003-06-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-03 16:57:26 IP:211.23.xxx.xxx 未訂閱
Robinon你好 狀況是前者...^^" 不過在"不知情原因或情況下", 目前的作法會有 "漏勾", ㄚ...所以才想看看是不是有其他的想法或做法^^" 如果是後者...我才不那麼累勒^^
系統時間:2024-05-04 0:56:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!