Board index » Visual Studio » Monitor a directory using WaitForMultipleObjects
|
Rodotski
|
Monitor a directory using WaitForMultipleObjects
Visual Studio293
Platform : Windows2000, XP, Microsoft Visual C++ .NET (Version 7.1) I need to process the files in a directory immediately the moment it gets deposited in a directory. I am trying to achieve this by running WaitForMultipleObjects , FindFirstChangeNotificationAPI, FindNextChangeNotification in a While loop When I use dos command copy in batch file for copying file from one folder to other then my application reads from the destination directory smoothly. But when I use move command, file moved from one directory to another but my aplication does not read the file from the directory. (Please see excerpts of code below:) int CMyWorkThread::Run() { ASSERT_VALID(GetWork()); CDirEventReceiverWork* dirWrk = dynamic_cast<CDirEventReceiverWork*>(GetWork()); try { DWORD timeout = GetCycleTime(); BOOL waitAll = FALSE; DWORD dwWaitStatus; while (TRUE) { try { dirWrk->GetEventDirectoryList(con); dwChangeHandle= FindFirstChangeNotification ( lpDir, // directory to watch subDirState, // do not watch subtree FILE_NOTIFY_CHANGE_CREATION |FILE_NOTIFY_CHANGE_LAST_WRITE); // watch file name changes AddToHandleMap(dwChangeHandle, &ci); dwChangeHandles = GetHandleList(); int nHandles = m_pDirEventServer.GetHandleMap().size()+ 2; dwWaitStatus = WaitForMultipleObjects(nHandles, dwChangeHandles, waitAll, timeout); if(dwWaitStatus == WAIT_TIMEOUT ) { //Refresh receiver list continue; } if((dwWaitStatus == WAIT_OBJECT_0 + 0) || (dwWaitStatus == WAIT_OBJECT_0 + 1) ) { //signalled kill event break; } if((dwWaitStatus <= (WAIT_OBJECT_0 +1)) || (dwWaitStatus>= nHandles)) { ASSERT(false); ostringstream ost; ost << "Invalid wait return value [" << dwWaitStatus << "]"; CABIException(PROGRAM_ERROR, ost.str(), __FILE__, __LINE__); continue; } if(dwWaitStatus == m_pDirEventServer.GetHandleMap().size()) { //signalled kill event break; } //Process the files } Any suggestion or solution will be the great help for me. Regards Alok Mahto - |
