Возникла проблема при вызове ReadDirectoryChangesW — после занесения определенного количества событий в массив — события перестают отлавливатся. При динамическом выделении памяти — память занятая под массив не освобождается.
FILE_NOTIFY_INFORMATION *fn = new FILE_NOTIFY_INFORMATION[file_cnt];
DWORD buff_size = sizeof(FILE_NOTIFY_INFORMATION)*file_cnt;
int cnt = 0;
DWORD lpBytesReturned;
while(true){
while(ReadDirectoryChangesW(
hDir, //handle to the monitoring directory
fn, //structure to satisfy the FILE_NOTIFY_INFORMATION buffer
buff_size, //size of BUFFER
TRUE, //include subdirectories
FILE_NOTIFY_CHANGE_FILE_NAME|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_LAST_WRITE|
FILE_NOTIFY_CHANGE_LAST_ACCESS|
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_SECURITY,
&lpBytesReturned,
NULL,
NULL))
{
cnt++;
switch(fn[0].Action){
case FILE_ACTION_ADDED:
break; //The file was added to the directory.
case FILE_ACTION_REMOVED:
break;//The file was removed from the directory.
case FILE_ACTION_MODIFIED:
break;//The file was modified. This can be a change in the time stamp or attributes.
case FILE_ACTION_RENAMED_OLD_NAME:
break;//The file was renamed and this is the old name.
case FILE_ACTION_RENAMED_NEW_NAME:
break;
}//switch of the Actions
if (cnt==file_cnt){
delete [] fn;
cnt=0;
fn = new FILE_NOTIFY_INFORMATION[file_cnt];
}