现在的位置: 首页 > 综合 > 正文

ReadDirectoryChanges监控文件改动

2018年06月10日 ⁄ 综合 ⁄ 共 1024字 ⁄ 字号 评论关闭
	const int buf_size = 1024;
	TCHAR buf[buf_size];

	DWORD dwBufWrittenSize;
	HANDLE hDir;

	hDir = CreateFile(lpDir, FILE_LIST_DIRECTORY, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 
		FILE_FLAG_BACKUP_SEMANTICS, NULL); 

	if (hDir == INVALID_HANDLE_VALUE)
	{
		DWORD dwErrorCode;
		dwErrorCode = GetLastError();
		CloseHandle(hDir); 
		exit(0);
	}

	while(true)
	{
		if(ReadDirectoryChangesW(hDir, &buf, buf_size, FALSE, FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_ATTRIBUTES \
			, &dwBufWrittenSize, NULL, NULL))
		{
			FILE_NOTIFY_INFORMATION * pfiNotifyInfo = (FILE_NOTIFY_INFORMATION*)buf;
			DWORD dwNextEntryOffset;

			do
			{
				dwNextEntryOffset = pfiNotifyInfo->NextEntryOffset;
				DWORD dwAction = pfiNotifyInfo->Action; 
				DWORD dwFileNameLength = pfiNotifyInfo->FileNameLength;

				if(_tcsnccmp(pfiNotifyInfo->FileName, lpFileName, _tcsclen(lpFileName)) == 0)
				{
					Process();
					//printf("%d\n", pfiNotifyInfo->Action);
				}

				if(dwNextEntryOffset != 0)
				{
					pfiNotifyInfo= (FILE_NOTIFY_INFORMATION*)((BYTE*)pfiNotifyInfo + dwNextEntryOffset);
				}

			}while (dwNextEntryOffset != 0);
		}
		else
		{
			printf("Moniter Failed!\n");
		}	
	}

	CloseHandle(hDir); 

抱歉!评论已关闭.