// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>#include <tchar.h>#include <stdio.h>#include <assert.h>char* WideCharToMultiByte(LPCTSTR widestr){int num = WideCharToMultiByte(CP_OEMCP, NULL, widestr, -1, NULL, 0, NULL, FALSE);char *pchar = new char[num];WideCharToMultiByte(CP_OEMCP, NULL, widestr, -1, pchar, num, NULL, FALSE);return pchar;}bool IsDirectory(const LPTSTR & strPath){DWORD dwAttrib = GetFileAttributes(strPath);return static_cast<bool>((dwAttrib != 0xffffffff && (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)));}int main(){HANDLE hDir;BYTE* pBuffer = (LPBYTE)new CHAR[4096];DWORD dwBufferSize;LPTSTR lpPath = _T("D:\\var\\www\\");WCHAR szFileName[MAX_PATH];char* szFilePath;PFILE_NOTIFY_INFORMATION pNotify = (PFILE_NOTIFY_INFORMATION)pBuffer;hDir = CreateFile(lpPath, FILE_LIST_DIRECTORY,FILE_SHARE_READ |FILE_SHARE_WRITE |FILE_SHARE_DELETE, NULL,OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS |FILE_FLAG_OVERLAPPED, NULL);if (hDir == INVALID_HANDLE_VALUE){printf("INVALID_HANDLE_VALUE");return 0;}while (TRUE){if (ReadDirectoryChangesW(hDir,pBuffer,4096,TRUE,FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE,&dwBufferSize,NULL,NULL)){memset(szFileName, 0, MAX_PATH);memcpy(szFileName, lpPath, _tcslen(lpPath) * sizeof(WCHAR));memcpy(szFileName + _tcslen(lpPath), pNotify->FileName, pNotify->FileNameLength);szFilePath = WideCharToMultiByte(szFileName);switch (pNotify->Action){case FILE_ACTION_ADDED:if (IsDirectory(szFileName)){printf("Directory %s added.\n", szFilePath);}else{printf("File %s added.\n", szFilePath);}break;case FILE_ACTION_REMOVED:if (IsDirectory(szFileName)){printf("Directory %s removed.\n", szFilePath);}else{printf("File %s removed.\n", szFilePath);}break;case FILE_ACTION_MODIFIED:if (!IsDirectory(szFileName)){printf("File %s modified.\n", szFilePath);}break;case FILE_ACTION_RENAMED_OLD_NAME:if (pNotify && pNotify->NextEntryOffset != 0UL){PFILE_NOTIFY_INFORMATION pNext = (PFILE_NOTIFY_INFORMATION)((LPBYTE)pNotify + pNotify->NextEntryOffset);assert((DWORD)((BYTE*)pNext - pBuffer) < dwBufferSize);{WCHAR szFileName2[MAX_PATH];char* szFilePath2;memset(szFileName2, 0, MAX_PATH);memcpy(szFileName2, lpPath, _tcslen(lpPath) * sizeof(WCHAR));memcpy(szFileName2 + _tcslen(lpPath), pNext->FileName, pNext->FileNameLength);szFilePath2 = WideCharToMultiByte(szFileName2);if (IsDirectory(szFileName2)){printf("Directory name changed from %s to %s.\n", szFilePath, szFilePath2);}else{printf("File name changed from %s to %s.\n", szFilePath, szFilePath2);}}}break;case FILE_ACTION_RENAMED_NEW_NAME:printf("FILE_ACTION_RENAMED_NEW_NAME.\n");break;default:break;}}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。