小工具(监视文件变化)

// MonitorFile.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "MonitorFileTest.h"


int _tmain(int argc, _TCHAR* argv[])
{
	MonitorFile("C:\\CloudMusic\\");
	printf("monitor...\n");
	getchar();
	return 0;
}

#include "MonitorFileTest.h"
#include "stdafx.h"
#include <Windows.h>


void ShowError(char *pszText)
{
	char szErr[MAX_PATH] = { 0 };
	wsprintf(szErr, "%S ERROR [%d]", pszText, GetLastError());
	MessageBox(NULL, szErr, "ERROR", MB_OK | MB_ICONERROR);

}

void W2C(wchar_t *pwszSrc, int iSrcLen, char *pszDest, int iDestLen)
{
	RtlZeroMemory(pszDest, iDestLen);
	WideCharToMultiByte(CP_ACP, 0, pwszSrc, (iSrcLen / 2), pszDest, iDestLen, NULL, NULL);

}

UINT MonitorFileThreadProc(LPVOID lpVoid)
{
	char *pszDirectory = (char *)lpVoid;

	HANDLE hDirectory = CreateFile(pszDirectory, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
	if (INVALID_HANDLE_VALUE == hDirectory)
	{
		ShowError("CreateFile");
		return 1;
	}

	char szTemp[MAX_PATH] = { 0 };
	BOOL bRet = FALSE;
	DWORD dwRet = 0;
	DWORD dwBufferSize = 2048;

	BYTE *pBuf = new BYTE[dwBufferSize];
	if (NULL == pBuf)
	{
		ShowError("new");
		return FALSE;
	}
	FILE_NOTIFY_INFORMATION *pFileNotifyInfo = (FILE_NOTIFY_INFORMATION*)pBuf;

	do
	{
		RtlZeroMemory(pFileNotifyInfo, dwBufferSize);
		bRet = ReadDirectoryChangesW(hDirectory, pFileNotifyInfo, dwBufferSize, TRUE, FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_LAST_WRITE, &dwRet, NULL, NULL);

		if (FALSE == bRet)
		{
			ShowError("ReadDirectoryChangesW");
			return FALSE;
		}

		W2C((wchar_t *)(&pFileNotifyInfo->FileName), pFileNotifyInfo->FileNameLength, szTemp, MAX_PATH);
		switch (pFileNotifyInfo->Action)
		{
		case FILE_ACTION_ADDED:
		{
								  printf("[File Added Action]%s\n", szTemp);
								  break;
		}
		default:
			break;
		}
	
	} while (bRet);
	
	CloseHandle(hDirectory);
	delete[] pBuf;
	pBuf = NULL;
	return 0;


}

void MonitorFile(char *pszDirectory)
{
	CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MonitorFileThreadProc, pszDirectory, 0, NULL);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值