{"id":1010,"date":"2018-02-11T18:13:15","date_gmt":"2018-02-11T10:13:15","guid":{"rendered":"https:\/\/damogame.cn:15443\/wordpress\/?p=1010"},"modified":"2018-02-11T18:13:15","modified_gmt":"2018-02-11T10:13:15","slug":"c%e7%9b%91%e6%b5%8b%e6%96%87%e4%bb%b6%e5%a4%b9%e5%8f%98%e5%8c%96","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/1010","title":{"rendered":"C++\u76d1\u6d4b\u6587\u4ef6\u5939\u53d8\u5316"},"content":{"rendered":"<h1 class=\"csdn_top\">C++\u76d1\u6d4b\u6587\u4ef6\u5939\u53d8\u5316<\/h1>\n<div class=\"article_bar clearfix\">\n<div class=\"artical_tag\"><span class=\"original\">\u8f6c\u8f7d\u00a0<\/span><span class=\"time\">2016\u5e7411\u670830\u65e5 11:05:44<\/span><\/div>\n<ul class=\"article_tags clearfix csdn-tracking-statistics tracking-click\" data-mod=\"popu_377\">\n<li class=\"tit\">\u6807\u7b7e\uff1a<\/li>\n<li><a href=\"http:\/\/so.csdn.net\/so\/search\/s.do?q=%E7%9B%91%E6%B5%8B%E6%96%87%E4%BB%B6%E5%A4%B9%E5%8F%98%E5%8C%96&amp;t=blog\" target=\"_blank\" rel=\"noopener\">\u76d1\u6d4b\u6587\u4ef6\u5939\u53d8\u5316<\/a>\u00a0\/<\/li>\n<li><a href=\"http:\/\/so.csdn.net\/so\/search\/s.do?q=ReadDirectoryChanges&amp;t=blog\" target=\"_blank\" rel=\"noopener\">ReadDirectoryChanges<\/a><\/li>\n<\/ul>\n<ul class=\"right_bar\">\n<li><button class=\"btn-noborder\"><i class=\"icon iconfont icon-read\"><\/i><span class=\"txt\">1678<\/span><\/button><\/li>\n<\/ul>\n<\/div>\n<div id=\"article_content\" class=\"article_content csdn-tracking-statistics tracking-click\" data-mod=\"popu_519\" data-dsm=\"post\">\n<div class=\"htmledit_views\">\n<p>\u8f6c\u81ea\uff1ahttp:\/\/blog.csdn.net\/zhihu008\/article\/details\/7995829<\/p>\n<p>Barry\u6ce8\uff1a\u53ea\u662f\u5b66\u4e60ReadDirectoryChangesW\u7684\u65f6\u5019\u53d1\u73b0\u7684\u4e00\u4e2a\u4f8b\u5b50\uff0c\u7528\u4e8e\u7406\u89e3ReadDirectoryChangesW\u7684\u7528\u6cd5\uff0c\u76ee\u524d\u53d1\u73b0\u7684\u4e0d\u8db3\u4e4b\u5904\u6709\uff1a<\/p>\n<p>1. ReadDirectoryChangesW\u7684\u9000\u51fa\u4e0d\u4f18\u96c5\uff0c\u76f4\u63a5TerminateThread\u5b9e\u5c5e\u4e0b\u4e0b\u7b56\uff0c\u5982\u679cclose\u65f6\u65e0\u9650\u7b49\u5f85\uff0c\u5f88\u5bb9\u6613\u6b7b\u9501<\/p>\n<p>2. \u76d1\u63a7\u76ee\u5f55\u4e0d\u4e3a\u7a7a\u65f6\uff0c\u76f4\u63a5\u5220\u9664\u89c1\u7a7a\u76ee\u5f55\uff0cReadDirectoryChangesW\u4e5f\u4e0d\u4f1a\u611f\u77e5\u5230\uff0c\u7ebf\u7a0b\u4e0d\u4f1a\u9000\u51fa\uff0c\u9664\u975e\u624b\u52a8\u518d\u6b21start\uff08\u4f1a\u6b7b\u9501\uff0c\u56e0\u4e3astart\u4e2d\u7684close\u662f\u65e0\u9650\u7b49\u5f85\uff09<\/p>\n<h1><a name=\"t0\"><\/a>FileSystemWatcher.h<\/h1>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><b>[cpp]<\/b>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/rankun1\/article\/details\/53405551#\">view plain<\/a><span class=\"tracking-ad\" data-mod=\"popu_168\">\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/rankun1\/article\/details\/53405551#\">copy<\/a><\/span><\/p>\n<div><embed id=\"ZeroClipboardMovie_1\" src=\"http:\/\/static.blog.csdn.net\/scripts\/ZeroClipboard\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"16\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_1\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\" start=\"1\">\n<li class=\"alt\"><span class=\"preprocessor\">#ifndef\u00a0__FILESYSTEMWATCHER_HPP__<\/span><\/li>\n<li class=\"\"><span class=\"preprocessor\">#define\u00a0__FILESYSTEMWATCHER_HPP__<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\"><span class=\"preprocessor\">#if(_WIN32_WINNT\u00a0&lt;\u00a00x0400)<\/span><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#define\u00a0_WIN32_WINNT\u00a00x0400<\/span><\/li>\n<li class=\"\"><span class=\"preprocessor\">#endif<\/span><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#include\u00a0&lt;windows.h&gt;<\/span><\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\"><span class=\"keyword\">class<\/span>\u00a0FileSystemWatcher<\/li>\n<li class=\"\">{<\/li>\n<li class=\"alt\"><span class=\"keyword\">public<\/span>:<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">enum<\/span>\u00a0Filter<\/li>\n<li class=\"alt\">\u00a0{<\/li>\n<li class=\"\">\u00a0\u00a0FILTER_FILE_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000001,\u00a0<span class=\"comment\">\/\/\u00a0add\/remove\/rename<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0FILTER_DIR_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000002,\u00a0<span class=\"comment\">\/\/\u00a0add\/remove\/rename<\/span><\/li>\n<li class=\"\">\u00a0\u00a0FILTER_ATTR_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000004,<\/li>\n<li class=\"alt\">\u00a0\u00a0FILTER_SIZE_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000008,<\/li>\n<li class=\"\">\u00a0\u00a0FILTER_LAST_WRITE_NAME\u00a0\u00a0=\u00a00x00000010,\u00a0<span class=\"comment\">\/\/\u00a0timestamp<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0FILTER_LAST_ACCESS_NAME\u00a0=\u00a00x00000020,\u00a0<span class=\"comment\">\/\/\u00a0timestamp<\/span><\/li>\n<li class=\"\">\u00a0\u00a0FILTER_CREATION_NAME\u00a0\u00a0\u00a0\u00a0=\u00a00x00000040,\u00a0<span class=\"comment\">\/\/\u00a0timestamp<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0FILTER_SECURITY_NAME\u00a0\u00a0\u00a0\u00a0=\u00a00x00000100<\/li>\n<li class=\"\">\u00a0};<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">enum<\/span>\u00a0ACTION<\/li>\n<li class=\"\">\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0ACTION_ERRSTOP\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a0-1,<\/li>\n<li class=\"\">\u00a0\u00a0ACTION_ADDED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000001,<\/li>\n<li class=\"alt\">\u00a0\u00a0ACTION_REMOVED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000002,<\/li>\n<li class=\"\">\u00a0\u00a0ACTION_MODIFIED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000003,<\/li>\n<li class=\"alt\">\u00a0\u00a0ACTION_RENAMED_OLD\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000004,<\/li>\n<li class=\"\">\u00a0\u00a0ACTION_RENAMED_NEW\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0=\u00a00x00000005<\/li>\n<li class=\"alt\">\u00a0};<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">typedef<\/span>\u00a0<span class=\"keyword\">void<\/span>\u00a0(__stdcall\u00a0*LPDEALFUNCTION)(\u00a0ACTION\u00a0act,\u00a0<span class=\"datatypes\">LPCWSTR<\/span>\u00a0filename,\u00a0<span class=\"datatypes\">LPVOID<\/span>\u00a0lParam\u00a0);<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0FileSystemWatcher();<\/li>\n<li class=\"\">\u00a0~FileSystemWatcher();<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\">\u00a0<span class=\"comment\">\/\/\u00a0LPCTSTR\u00a0dir:\u00a0dont\u00a0end-with\u00a0&#8220;\\\\&#8221;<\/span><\/li>\n<li class=\"alt\">\u00a0<span class=\"datatypes\">bool<\/span>\u00a0Run(\u00a0<span class=\"datatypes\">LPCTSTR<\/span>\u00a0dir,\u00a0<span class=\"datatypes\">bool<\/span>\u00a0bWatchSubtree,\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0dwNotifyFilter,\u00a0LPDEALFUNCTION\u00a0dealfun,\u00a0<span class=\"datatypes\">LPVOID<\/span>\u00a0lParam\u00a0);<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">void<\/span>\u00a0Close(\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0dwMilliseconds=INFINITE\u00a0);<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\"><span class=\"keyword\">private<\/span>:\u00a0<span class=\"comment\">\/\/\u00a0no-impl<\/span><\/li>\n<li class=\"alt\">\u00a0FileSystemWatcher(\u00a0<span class=\"keyword\">const<\/span>\u00a0FileSystemWatcher&amp;\u00a0);<\/li>\n<li class=\"\">\u00a0FileSystemWatcher\u00a0operator=(\u00a0<span class=\"keyword\">const<\/span>\u00a0FileSystemWatcher\u00a0);<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\"><span class=\"keyword\">private<\/span>:<\/li>\n<li class=\"alt\">\u00a0<span class=\"datatypes\">HANDLE<\/span>\u00a0m_hDir;<\/li>\n<li class=\"\">\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0m_dwNotifyFilter;<\/li>\n<li class=\"alt\">\u00a0<span class=\"datatypes\">bool<\/span>\u00a0m_bWatchSubtree;<\/li>\n<li class=\"\">\u00a0<span class=\"datatypes\">HANDLE<\/span>\u00a0m_hThread;<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">volatile<\/span>\u00a0<span class=\"datatypes\">bool<\/span>\u00a0m_bRequestStop;<\/li>\n<li class=\"\">\u00a0LPDEALFUNCTION\u00a0m_DealFun;<\/li>\n<li class=\"alt\">\u00a0<span class=\"datatypes\">LPVOID<\/span>\u00a0m_DealFunParam;<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">static<\/span>\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0WINAPI\u00a0Routine(\u00a0<span class=\"datatypes\">LPVOID<\/span>\u00a0lParam\u00a0);<\/li>\n<li class=\"alt\">};<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#endif\u00a0\/\/\u00a0__FILESYSTEMWATCHER_HPP__<\/span><\/li>\n<\/ol>\n<\/div>\n<h1><a name=\"t1\"><\/a>FileSystemWatcher.cpp<\/h1>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><b>[cpp]<\/b>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/rankun1\/article\/details\/53405551#\">view plain<\/a><span class=\"tracking-ad\" data-mod=\"popu_168\">\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/rankun1\/article\/details\/53405551#\">copy<\/a><\/span><\/p>\n<div><embed id=\"ZeroClipboardMovie_2\" src=\"http:\/\/static.blog.csdn.net\/scripts\/ZeroClipboard\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"16\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_2\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\" start=\"1\">\n<li class=\"alt\"><span class=\"preprocessor\">#include\u00a0&#8220;FileSystemWatcher.h&#8221;<\/span><\/li>\n<li class=\"\"><span class=\"preprocessor\">#include\u00a0&lt;cassert&gt;<\/span><\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\">FileSystemWatcher::FileSystemWatcher()\u00a0:\u00a0m_hDir(INVALID_HANDLE_VALUE),\u00a0m_hThread(NULL)<\/li>\n<li class=\"alt\">{<\/li>\n<li class=\"\">\u00a0assert(\u00a0FILTER_FILE_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_NOTIFY_CHANGE_FILE_NAME\u00a0\u00a0\u00a0);<\/li>\n<li class=\"alt\">\u00a0assert(\u00a0FILTER_DIR_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_NOTIFY_CHANGE_DIR_NAME\u00a0\u00a0\u00a0\u00a0);<\/li>\n<li class=\"\">\u00a0assert(\u00a0FILTER_ATTR_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_NOTIFY_CHANGE_ATTRIBUTES\u00a0\u00a0);<\/li>\n<li class=\"alt\">\u00a0assert(\u00a0FILTER_SIZE_NAME\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_NOTIFY_CHANGE_SIZE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);<\/li>\n<li class=\"\">\u00a0assert(\u00a0FILTER_LAST_WRITE_NAME\u00a0\u00a0==\u00a0FILE_NOTIFY_CHANGE_LAST_WRITE\u00a0\u00a0);<\/li>\n<li class=\"alt\">\u00a0assert(\u00a0FILTER_LAST_ACCESS_NAME\u00a0==\u00a0FILE_NOTIFY_CHANGE_LAST_ACCESS\u00a0);<\/li>\n<li class=\"\">\u00a0assert(\u00a0FILTER_CREATION_NAME\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_NOTIFY_CHANGE_CREATION\u00a0\u00a0\u00a0\u00a0);<\/li>\n<li class=\"alt\">\u00a0assert(\u00a0FILTER_SECURITY_NAME\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_NOTIFY_CHANGE_SECURITY\u00a0\u00a0\u00a0\u00a0);<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0assert(\u00a0ACTION_ADDED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_ACTION_ADDED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);<\/li>\n<li class=\"\">\u00a0assert(\u00a0ACTION_REMOVED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_ACTION_REMOVED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);<\/li>\n<li class=\"alt\">\u00a0assert(\u00a0ACTION_MODIFIED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_ACTION_MODIFIED\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);<\/li>\n<li class=\"\">\u00a0assert(\u00a0ACTION_RENAMED_OLD\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_ACTION_RENAMED_OLD_NAME\u00a0\u00a0\u00a0);<\/li>\n<li class=\"alt\">\u00a0assert(\u00a0ACTION_RENAMED_NEW\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0==\u00a0FILE_ACTION_RENAMED_NEW_NAME\u00a0\u00a0\u00a0);<\/li>\n<li class=\"\">}<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\">FileSystemWatcher::~FileSystemWatcher()<\/li>\n<li class=\"alt\">{<\/li>\n<li class=\"\">\u00a0Close();<\/li>\n<li class=\"alt\">}<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\"><span class=\"datatypes\">bool<\/span>\u00a0FileSystemWatcher::Run(\u00a0<span class=\"datatypes\">LPCTSTR<\/span>\u00a0dir,\u00a0<span class=\"datatypes\">bool<\/span>\u00a0bWatchSubtree,\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0dwNotifyFilter,\u00a0LPDEALFUNCTION\u00a0dealfun,\u00a0<span class=\"datatypes\">LPVOID<\/span>\u00a0lParam\u00a0)<\/li>\n<li class=\"\">{<\/li>\n<li class=\"alt\">\u00a0Close();<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0m_hDir\u00a0=\u00a0CreateFile(<span class=\"comment\">\/\/dir\u76ee\u5f55\u4e0d\u80fd\u4ee5&#8217;\\&#8217;\u7ed3\u5c3e\uff0c\u5426\u5219\u76d1\u6d4b\u4e0d\u5230dir\u76ee\u5f55\u88ab\u5220\u9664\uff0c\u4e0d\u4ee5\\\u7ed3\u5c3e\uff0c\u53ef\u4ee5\u68c0\u6d4b\u5230\uff08\u4ec5\u9650\u4e8e\u7a7a\u76ee\u5f55\u65f6\uff09<\/span><\/li>\n<li class=\"\">\u00a0\u00a0dir,<\/li>\n<li class=\"alt\">\u00a0\u00a0GENERIC_READ,<\/li>\n<li class=\"\">\u00a0\u00a0FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,<\/li>\n<li class=\"alt\">\u00a0\u00a0NULL,<\/li>\n<li class=\"\">\u00a0\u00a0OPEN_EXISTING,<\/li>\n<li class=\"alt\">\u00a0\u00a0FILE_FLAG_BACKUP_SEMANTICS,<\/li>\n<li class=\"\">\u00a0\u00a0NULL<\/li>\n<li class=\"alt\">\u00a0\u00a0);<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">if<\/span>(\u00a0INVALID_HANDLE_VALUE\u00a0==\u00a0m_hDir\u00a0)\u00a0<span class=\"keyword\">return<\/span>\u00a0<span class=\"keyword\">false<\/span>;<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\">\u00a0m_bWatchSubtree\u00a0=\u00a0bWatchSubtree;<\/li>\n<li class=\"alt\">\u00a0m_dwNotifyFilter\u00a0=\u00a0dwNotifyFilter;<\/li>\n<li class=\"\">\u00a0m_DealFun\u00a0=\u00a0dealfun;<\/li>\n<li class=\"alt\">\u00a0m_DealFunParam\u00a0=\u00a0lParam;<\/li>\n<li class=\"\">\u00a0m_bRequestStop\u00a0=\u00a0<span class=\"keyword\">false<\/span>;<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\">\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0ThreadId;<\/li>\n<li class=\"alt\">\u00a0m_hThread\u00a0=\u00a0CreateThread(\u00a0NULL,0,Routine,<span class=\"keyword\">this<\/span>,0,&amp;ThreadId\u00a0);<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">if<\/span>(\u00a0NULL\u00a0==\u00a0m_hThread\u00a0)<\/li>\n<li class=\"alt\">\u00a0{<\/li>\n<li class=\"\">\u00a0\u00a0CloseHandle(\u00a0m_hDir\u00a0);<\/li>\n<li class=\"alt\">\u00a0\u00a0m_hDir\u00a0=\u00a0INVALID_HANDLE_VALUE;<\/li>\n<li class=\"\">\u00a0}<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">return<\/span>\u00a0NULL!=m_hThread;<\/li>\n<li class=\"alt\">}<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\"><span class=\"keyword\">void<\/span>\u00a0FileSystemWatcher::Close(\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0dwMilliseconds\u00a0)<\/li>\n<li class=\"\">{<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">if<\/span>(\u00a0NULL\u00a0!=\u00a0m_hThread\u00a0)<\/li>\n<li class=\"\">\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0m_bRequestStop\u00a0=\u00a0<span class=\"keyword\">true<\/span>;<\/li>\n<li class=\"\">\u00a0\u00a0<span class=\"keyword\">if<\/span>(\u00a0WAIT_TIMEOUT\u00a0==\u00a0WaitForSingleObject(m_hThread,dwMilliseconds)\u00a0)<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0TerminateThread(\u00a0m_hThread,\u00a00\u00a0);<\/li>\n<li class=\"\">\u00a0\u00a0CloseHandle(\u00a0m_hThread\u00a0);<\/li>\n<li class=\"alt\">\u00a0\u00a0m_hThread\u00a0=\u00a0NULL;<\/li>\n<li class=\"\">\u00a0}<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">if<\/span>(\u00a0INVALID_HANDLE_VALUE\u00a0!=\u00a0m_hDir\u00a0)<\/li>\n<li class=\"\">\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0CloseHandle(\u00a0m_hDir\u00a0);<\/li>\n<li class=\"\">\u00a0\u00a0m_hDir\u00a0=\u00a0INVALID_HANDLE_VALUE;<\/li>\n<li class=\"alt\">\u00a0}<\/li>\n<li class=\"\">}<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\"><span class=\"datatypes\">DWORD<\/span>\u00a0WINAPI\u00a0FileSystemWatcher::Routine(\u00a0<span class=\"datatypes\">LPVOID<\/span>\u00a0lParam\u00a0)<\/li>\n<li class=\"alt\">{<\/li>\n<li class=\"\">\u00a0FileSystemWatcher&amp;\u00a0obj\u00a0=\u00a0*(FileSystemWatcher*)lParam;<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\">\u00a0<span class=\"datatypes\">BYTE<\/span>\u00a0buf[\u00a02*(<span class=\"keyword\">sizeof<\/span>(FILE_NOTIFY_INFORMATION)+2*MAX_PATH)+2\u00a0];<\/li>\n<li class=\"alt\">\u00a0FILE_NOTIFY_INFORMATION*\u00a0pNotify=(FILE_NOTIFY_INFORMATION\u00a0*)buf;<\/li>\n<li class=\"\">\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0BytesReturned;<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">while<\/span>(\u00a0!obj.m_bRequestStop\u00a0)<\/li>\n<li class=\"\">\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0<span class=\"keyword\">if<\/span>(\u00a0ReadDirectoryChangesW(\u00a0obj.m_hDir,<\/li>\n<li class=\"\">\u00a0\u00a0\u00a0pNotify,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0<span class=\"keyword\">sizeof<\/span>(buf)-2,<\/li>\n<li class=\"\">\u00a0\u00a0\u00a0obj.m_bWatchSubtree,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0obj.m_dwNotifyFilter,<\/li>\n<li class=\"\">\u00a0\u00a0\u00a0&amp;BytesReturned,<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0NULL,<\/li>\n<li class=\"\">\u00a0\u00a0\u00a0NULL\u00a0)\u00a0)\u00a0<span class=\"comment\">\/\/\u00a0\u65e0\u9650\u7b49\u5f85\uff0c\u5e94\u5f53\u4f7f\u7528\u5f02\u6b65\u65b9\u5f0f<\/span><\/li>\n<li class=\"alt\">\u00a0\u00a0{<\/li>\n<li class=\"\">\u00a0\u00a0\u00a0<span class=\"keyword\">for<\/span>(\u00a0FILE_NOTIFY_INFORMATION*\u00a0p=pNotify;\u00a0p;\u00a0)<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0{<\/li>\n<li class=\"\">\u00a0\u00a0\u00a0\u00a0<span class=\"datatypes\">WCHAR<\/span>\u00a0c\u00a0=\u00a0p-&gt;FileName[p-&gt;FileNameLength\/2];<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0p-&gt;FileName[p-&gt;FileNameLength\/2]\u00a0=\u00a0L<span class=\"string\">&#8216;\\0&#8217;<\/span>;<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0obj.m_DealFun(\u00a0(ACTION)p-&gt;Action,\u00a0p-&gt;FileName,\u00a0obj.m_DealFunParam\u00a0);<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0p-&gt;FileName[p-&gt;FileNameLength\/2]\u00a0=\u00a0c;<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">if<\/span>(\u00a0p-&gt;NextEntryOffset\u00a0)<\/li>\n<li class=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0p\u00a0\u00a0=\u00a0(PFILE_NOTIFY_INFORMATION)(\u00a0(<span class=\"datatypes\">BYTE<\/span>*)p\u00a0+\u00a0p-&gt;NextEntryOffset\u00a0);<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0\u00a0<span class=\"keyword\">else<\/span><\/li>\n<li class=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0p\u00a0=\u00a00;<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0}<\/li>\n<li class=\"\">\u00a0\u00a0}<\/li>\n<li class=\"alt\">\u00a0\u00a0<span class=\"keyword\">else<\/span><\/li>\n<li class=\"\">\u00a0\u00a0{<\/li>\n<li class=\"alt\">\u00a0\u00a0\u00a0obj.m_DealFun(\u00a0(ACTION)ACTION_ERRSTOP,\u00a00,\u00a0obj.m_DealFunParam\u00a0);<\/li>\n<li class=\"\">\u00a0\u00a0\u00a0<span class=\"keyword\">break<\/span>;<\/li>\n<li class=\"alt\">\u00a0\u00a0}<\/li>\n<li class=\"\">\u00a0}<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">return<\/span>\u00a00;<\/li>\n<li class=\"alt\">}<\/li>\n<\/ol>\n<\/div>\n<h1><a name=\"t2\"><\/a>main\u51fd\u6570<\/h1>\n<div class=\"dp-highlighter bg_cpp\">\n<div class=\"bar\">\n<div class=\"tools\"><b>[cpp]<\/b>\u00a0<a class=\"ViewSource\" title=\"view plain\" href=\"http:\/\/blog.csdn.net\/rankun1\/article\/details\/53405551#\">view plain<\/a><span class=\"tracking-ad\" data-mod=\"popu_168\">\u00a0<a class=\"CopyToClipboard\" title=\"copy\" href=\"http:\/\/blog.csdn.net\/rankun1\/article\/details\/53405551#\">copy<\/a><\/span><\/p>\n<div><embed id=\"ZeroClipboardMovie_3\" src=\"http:\/\/static.blog.csdn.net\/scripts\/ZeroClipboard\/ZeroClipboard.swf\" type=\"application\/x-shockwave-flash\" width=\"16\" height=\"16\" align=\"middle\" name=\"ZeroClipboardMovie_3\" data-mce-fragment=\"1\"><\/embed><\/div>\n<\/div>\n<\/div>\n<ol class=\"dp-cpp\" start=\"1\">\n<li class=\"alt\"><span class=\"preprocessor\">#include\u00a0&#8220;stdafx.h&#8221;<\/span><\/li>\n<li class=\"\"><span class=\"preprocessor\">#include\u00a0&#8220;FileSystemWatcher.h&#8221;<\/span><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#include\u00a0&lt;stdio.h&gt;<\/span><\/li>\n<li class=\"\"><span class=\"preprocessor\">#include\u00a0&lt;locale.h&gt;<\/span><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#include\u00a0&lt;assert.h&gt;<\/span><\/li>\n<li class=\"\"><span class=\"preprocessor\">#include\u00a0&lt;tchar.h&gt;<\/span><\/li>\n<li class=\"alt\"><span class=\"preprocessor\">#include\u00a0&lt;conio.h&gt;<\/span><\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\"><span class=\"keyword\">void<\/span>\u00a0__stdcall\u00a0MyDeal(\u00a0FileSystemWatcher::ACTION\u00a0act,\u00a0<span class=\"datatypes\">LPCWSTR<\/span>\u00a0filename,\u00a0<span class=\"datatypes\">LPVOID<\/span>\u00a0lParam\u00a0)<\/li>\n<li class=\"\">{<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">static<\/span>\u00a0FileSystemWatcher::ACTION\u00a0pre\u00a0=\u00a0FileSystemWatcher::ACTION_ERRSTOP;<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">switch<\/span>(\u00a0act\u00a0)<\/li>\n<li class=\"alt\">\u00a0{<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">case<\/span>\u00a0FileSystemWatcher::ACTION_ADDED:<\/li>\n<li class=\"alt\">\u00a0\u00a0wprintf_s(\u00a0L<span class=\"string\">&#8220;Added\u00a0\u00a0\u00a0\u00a0\u00a0&#8211;\u00a0%s\\n&#8221;<\/span>,\u00a0filename\u00a0);<\/li>\n<li class=\"\">\u00a0\u00a0<span class=\"keyword\">break<\/span>;<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">case<\/span>\u00a0FileSystemWatcher::ACTION_REMOVED:<\/li>\n<li class=\"\">\u00a0\u00a0wprintf_s(\u00a0L<span class=\"string\">&#8220;Removed\u00a0\u00a0\u00a0&#8211;\u00a0%s\\n&#8221;<\/span>,\u00a0filename\u00a0);<\/li>\n<li class=\"alt\">\u00a0\u00a0<span class=\"keyword\">break<\/span>;<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">case<\/span>\u00a0FileSystemWatcher::ACTION_MODIFIED:<\/li>\n<li class=\"alt\">\u00a0\u00a0wprintf_s(\u00a0L<span class=\"string\">&#8220;Modified\u00a0\u00a0&#8211;\u00a0%s\\n&#8221;<\/span>,\u00a0filename\u00a0);<\/li>\n<li class=\"\">\u00a0\u00a0<span class=\"keyword\">break<\/span>;<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">case<\/span>\u00a0FileSystemWatcher::ACTION_RENAMED_OLD:<\/li>\n<li class=\"\">\u00a0\u00a0wprintf_s(\u00a0L<span class=\"string\">&#8220;Rename(O)\u00a0&#8211;\u00a0%s\\n&#8221;<\/span>,\u00a0filename\u00a0);<\/li>\n<li class=\"alt\">\u00a0\u00a0<span class=\"keyword\">break<\/span>;<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">case<\/span>\u00a0FileSystemWatcher::ACTION_RENAMED_NEW:<\/li>\n<li class=\"alt\">\u00a0\u00a0assert(\u00a0pre\u00a0==\u00a0FileSystemWatcher::ACTION_RENAMED_OLD\u00a0);<\/li>\n<li class=\"\">\u00a0\u00a0wprintf_s(\u00a0L<span class=\"string\">&#8220;Rename(N)\u00a0&#8211;\u00a0%s\\n&#8221;<\/span>,\u00a0filename\u00a0);<\/li>\n<li class=\"alt\">\u00a0\u00a0<span class=\"keyword\">break<\/span>;<\/li>\n<li class=\"\">\u00a0<span class=\"keyword\">case<\/span>\u00a0FileSystemWatcher::ACTION_ERRSTOP:<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">default<\/span>:<\/li>\n<li class=\"\">\u00a0\u00a0wprintf_s(\u00a0L<span class=\"string\">&#8220;&#8212;ERROR&#8212;%s\\n&#8221;<\/span>,\u00a0filename\u00a0);<\/li>\n<li class=\"alt\">\u00a0\u00a0<span class=\"keyword\">break<\/span>;<\/li>\n<li class=\"\">\u00a0}<\/li>\n<li class=\"alt\">\u00a0pre\u00a0=\u00a0act;<\/li>\n<li class=\"\">}<\/li>\n<li class=\"alt\"><\/li>\n<li class=\"\"><span class=\"datatypes\">int<\/span>\u00a0main()<\/li>\n<li class=\"alt\">{<\/li>\n<li class=\"\">\u00a0<span class=\"datatypes\">LPCTSTR<\/span>\u00a0sDir=\u00a0TEXT(<span class=\"string\">&#8220;D:\\\\\u76d1\u6d4b\u6587\u4ef6\u5939&#8221;<\/span>);<\/li>\n<li class=\"alt\">\u00a0<span class=\"datatypes\">DWORD<\/span>\u00a0dwNotifyFilter\u00a0=\u00a0FileSystemWatcher::FILTER_FILE_NAME|FileSystemWatcher::FILTER_DIR_NAME;<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0FileSystemWatcher\u00a0fsw;<\/li>\n<li class=\"\">\u00a0<span class=\"datatypes\">bool<\/span>\u00a0r\u00a0=\u00a0fsw.Run(\u00a0sDir,\u00a0<span class=\"keyword\">true<\/span>,\u00a0dwNotifyFilter,\u00a0&amp;MyDeal,\u00a00\u00a0);<\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">if<\/span>(\u00a0!r\u00a0)\u00a0<span class=\"keyword\">return<\/span>\u00a0-1;<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0_tsetlocale(\u00a0LC_CTYPE,\u00a0TEXT(<span class=\"string\">&#8220;chs&#8221;<\/span>)\u00a0);<\/li>\n<li class=\"\">\u00a0_tprintf_s(\u00a0TEXT(<span class=\"string\">&#8220;Watch%s\\n&#8221;<\/span>),\u00a0sDir\u00a0);<\/li>\n<li class=\"alt\">\u00a0_tprintf_s(\u00a0TEXT(<span class=\"string\">&#8220;Press\u00a0&lt;q&gt;\u00a0to\u00a0quit.\\n&#8221;<\/span>)\u00a0);<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">while<\/span>(\u00a0_getch()\u00a0!=\u00a0<span class=\"string\">&#8216;q&#8217;<\/span>\u00a0);<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0fsw.Close(1000);<\/li>\n<li class=\"\"><\/li>\n<li class=\"alt\">\u00a0<span class=\"keyword\">return<\/span>\u00a00;<\/li>\n<li class=\"\">}<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>C++\u76d1\u6d4b\u6587\u4ef6\u5939\u53d8\u5316 \u8f6c\u8f7d\u00a02016\u5e741<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[],"tags":[118],"class_list":["post-1010","post","type-post","status-publish","format-standard","hentry","tag-02-"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/1010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=1010"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/1010\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=1010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=1010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=1010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}