文件监控之FileSystemWatcher(C++详解) c 文件监控

这些天在研究一些文件监控方面的知识,把自己积累的一些小知识拿出来和大家分享一下,为了能让更多的人能够更容易看明白,我特意加了一些注释,不算很详细,但是理解起来应该更轻松一点,希望各位大虾多多指正。。。技术在于交流嘛!如果希望能多了解一些文件监控方面的知识,请参考我的另一篇文章——文件监控之ReadDirectoryChangesW(C++详解)。

文件监控之FileSystemWatcher(C++详解) c 文件监控

#using

#include

#include

#include

using namespace System;

using namespace System::IO;

ref class FSEventHandler

{

private:

static int count = 0;

void OnChanged (Object^ source,FileSystemEventArgs^ e)

{

//当文件改变、创建、或者删除时执行的动作(count用于批量监控,可以测试由于粘贴大批量文件而是否引发监测漏洞问题)

Console::WriteLine("{0}File:{1}ChangeType:{2}",

++count, e->FullPath, e->ChangeType,e->Name);

}

void OnRenamed(Object^ source,RenamedEventArgs^ e)

{

//定义文件重命名时执行的动作

Console::WriteLine("{0}File:{1}renamed to:{2}",

++count, e->OldFullPath, e->FullPath);

}

public:

int-- static run()

{

//创建一个FileSystemWatcher并设置它的属性.

FileSystemWatcher^ fsWatcher = gcnew FileSystemWatcher( );

fsWatcher->Path = "E:\wang";

//设置缓冲区大小1M,根据需求设置

fsWatcher->InternalBufferSize = 1048576;

//监听文件、目录、文件大小的改变

fsWatcher->NotifyFilter = static_cast

(NotifyFilters::FileName |

NotifyFilters::DirectoryName |

NotifyFilters::Size);

//监听子目录

fsWatcher->IncludeSubdirectories = true;

//添加事件处理程序

FSEventHandler^ handler = gcnewFSEventHandler();

fsWatcher->Changed += gcnewFileSystemEventHandler(

handler, &FSEventHandler::OnChanged);

fsWatcher->Created += gcnewFileSystemEventHandler(

handler, &FSEventHandler::OnChanged);

fsWatcher->Deleted+= gcnewFileSystemEventHandler(

handler, &FSEventHandler::OnChanged);

fsWatcher->Renamed += gcnewRenamedEventHandler(

handler, &FSEventHandler::OnRenamed);

//开始监听

fsWatcher->EnableRaisingEvents = true;

Console::WriteLine("Press Enter toquit the sample.");

Console::ReadLine();

return 0;

}

};

int main()

{

FSEventHandler::run();

}

注意事项(步骤):

1、创建FileSystemWatcher,并设置它的属性(例如:设置监控的目录就需设置Path属性,设置缓冲区大小就需设置InternalBufferSize属性)。

2、根据需求适当设置缓冲区大小,否则有可能会因大批量文件造成监控遗漏问题(例:同时复制或者删除1000个文件,可能只检测到500、600个)。InternalBufferSize属性用于获取或设置内部缓冲区的大小,默认值为4096(4KB)。内部缓冲区用来存储监视到的更改信息。如果短时间内更改过多,则缓冲区会发生溢出,导致某些监视到的更改数据丢失。但是增加缓冲区大小,会使系统的运行开销增大,因此,适当设置缓冲区大小,若要避免缓冲区溢出,则使用NotifyFilter和IncludeSubdirectories属性筛选掉不想要的更改通知,如果内部缓冲区溢出,组件将引发Error事件。

3、指定在文件、文件夹中监听的更改(例:NotifyFilters::FileName|NotifyFilters::DirectoryName |NotifyFilters::Size监听文件、目录、文件大小的改变)

4、监听子目录,设置fsWatcher->IncludeSubdirectories= true;

5、添加事件处理程序,主要包括:Changed、Create、Delete、Ranamed。

以下为我将InternalBufferSize的大小设置为1M的时候监听同时删除12000个文本文档的截图,

注:技术在于交流、沟通,转载请注明出处并保持作品的完整性。作者:╰☆奋斗ing❤孩子`原文:http://blog.sina.com.cn/s/blog_a6fb6cc901017urz.html。

  

爱华网本文地址 » http://www.413yy.cn/a/25101016/314176.html

更多阅读

C 句柄概念详解 新概念英语3练习详解

C++句柄概念详解这个句柄只是从英文handle翻译过来的,只问句是什么意思难以解释,这个是我从别人的空间收集的信息,功能上的理解:什么是"句柄"(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东东。

声明:《文件监控之FileSystemWatcher(C++详解) c 文件监控》为网友春风吹乔木分享!如侵犯到您的合法权益请联系我们删除