有關於監控目錄(Monitoring changes in a directory) |
尚未結案
|
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
感謝各位看過小弟的問題^^ 目前小弟已可順利的利用 FindFirstChangeNotification 相關方式, 持續
監控特定目錄(directory)內的變化, 目的是在於取得由另一Application
產生的 file 與自己的AP作溝通... 小弟的問題在於, 對於監控目錄做法而言, 除了使用此種方式之外, 是否有其他的做法...因為目前的做法, 需利用一 thread 作 Directory monitoring... 有可能不需動用 thread 嗎? ^^" 小弟學淺, 還請各位先進賜教^^, 謝謝
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
先謝謝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 發送簡訊給我 |
TurboPower shellshock has a component and demo for monitoring.... http://sourceforge.net/projects/tpshellshock/
|
gemi0305
版主 發表:81 回覆:564 積分:629 註冊:2003-05-11 發送簡訊給我 |
|
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
謝謝 william 的提供, 小弟我會好好尋寶的^^ 也謝謝 gemi0305 讓我越想好好讀一下「c++builder Windows API範例辭典」^^" 小弟做法的元件(BCB), 分享各位, 還望指教^^
(不過很久前寫的, 是為了特定目的, 所以不是很完整...)
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=38376 不過除了這些做法之外, 不曉得還有沒有別種思考方式ㄋㄟ^^"
或許文章標題改成 [討論]...
|
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
不好意思
小弟上船的檔案沒附說明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 發送簡訊給我 |
|
apang
一般會員 發表:11 回覆:20 積分:6 註冊:2003-06-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |