📄 directorymon.cpp
字号:
//---------------------------------------------------------------------------
#pragma hdrstop
#include <vcl\vcl.h>
#include "DirectoryMon.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TDirMonThread::TDirMonThread(bool CreateSuspended,TControl *ATargetControl) : TThread(CreateSuspended)
{
FreeOnTerminate = true;
Priority = tpNormal;
FTargetControl = ATargetControl;
FWatchPath = "";
OnTerminate = DirMonTerminate;
}
//---------------------------------------------------------------------------
void __fastcall TDirMonThread::DirMonTerminate(TObject *Sender)
{
}
//---------------------------------------------------------------------------
void __fastcall TDirMonThread::SetWatchPath(AnsiString Value)
{
if(FWatchPath != Value)FWatchPath = Value;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TDirMonThread::GetWatchPath()
{
return (FWatchPath);
}
//---------------------------------------------------------------------------
void __fastcall TDirMonThread::UpdateDirectory()
{
if (FTargetControl)FTargetControl->Perform(CM_DIRCONTENTSCHANGED, 0, 0);
}
//---------------------------------------------------------------------------
void __fastcall TDirMonThread::Execute()
{
HANDLE hDirectory;
DWORD BytesReturned;
FILE_NOTIFY_INFORMATION Buffer[1024];
hDirectory = CreateFile (
FWatchPath.c_str(),
FILE_LIST_DIRECTORY,
FILE_SHARE_READ|
FILE_SHARE_DELETE|
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS ,
NULL);
while (!Terminated)
{
Sleep (0);
if (hDirectory != INVALID_HANDLE_VALUE)
{
ReadDirectoryChangesW(
hDirectory, /* handle to directory */
&Buffer, /* read results buffer */
sizeof(Buffer), /* length of buffer */
FALSE, // flag for monitoring directory or directory tree (false=just dir true=sub directories too)
FILE_NOTIFY_CHANGE_SECURITY|
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_ACCESS|
FILE_NOTIFY_CHANGE_LAST_WRITE|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME, /* filter conditions */
&BytesReturned, /* bytes returned */
NULL, /* overlapped buffer */
NULL);
Sleep (0);
} else break;
// ---- Stop
if (Terminated ) break;
//Synchronize (
UpdateDirectory();
}
if(hDirectory != NULL)CloseHandle (hDirectory);
}
//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -