当前位置: 首页 > 编程语言 > C#

尽管采取了针对它的措施,FileSystemWatcher事件仍然提升了两次分享

时间:2023-04-10 14:17:38 C#

C#学习教程:FileSystemWatcher事件引发两次,尽管采取了反对措施这是我的FileMonitor类:classFileMonitor{publicFileMonitor(Stringpath){try{varwatcher=newFileSystemWatcher(){Path=path,IncludeSubdirectories=true,InternalBufferSize=65536,EnableRaisingEvents=true};watcher.Changed+=newFileSystemEventHandler(OnFileChanged);watcher.Created+=newFileSystemEventHandler(OnFileCreated);watcher.Deleted+=newFileSystemEventHandler(OnFileDeleted);watcher.Renamed+=newRenamedEventHandler(OnFileRenamed);watcher.Error+=newErrorEventHandler(OnWatcherError);}赶上(异常){抛出;}}privatevoidOnWatcherError(objectsender,ErrorEventArgse){}privatevoidOnFileChanged(objectsender,FileSystemEventArgse){try{((FileSystemWatcher)sender).EnableRaisingEvents=false;日志文件系统变化(e);}最后{((FileSystemWatcher)sender).EnableRaisingEvents=true;}}privatevoidOnFileCreated(objectsender,FileSystemEventArgse){try{((FileSystemWatcher)sender).EnableRaisingEvents=假;日志文件系统变化(e);}最后{((FileSystemWatcher)sender).EnableRaisingEvents=true;}}privatevoidOnFileDeleted(objectsender,FileSystemEventArgse){try{((FileSystemWatcher)sender).EnableRaisingEvents=false;日志文件系统变化(e);}最后{((FileSystemWatcher)sender).EnableRaisingEvents=true;}}privatevoidOnFileRenamed(objectsender,RenamedEventArgse){try{((FileSystemWatcher)sender).EnableRaisingEvents=false;日志文件系统重命名(e);}最后{((FileSystemWatcher)sender).EnableRaisingEvents=true;}}privatevoidLogFileSystemChanges(FileSystemEventArgse){stringlog=string.Format("{0:G}:{1}|{2}",DateTime.Now,e.FullPath,e.ChangeType);控制台.WriteLine(日志);}privatevoidLogFileSystemRenaming(RenamedEventArgse){stringlog=string.Format("{0:G}:{1}|旧名称:{2}",DateTime.Now,e.FullPath,e.OldName);控制台.WriteLine(日志);你可以告诉我,我已经尝试了((FileSystemWatcher)sender).EnableRaisingEvents=false;对于“锁定”((FileSystemWatcher)sender).EnableRaisingEvents=false;,但我可以从我的控制台输出中看出该事件触发了两次任何想法?我真的不知道从哪里开始。我遇到了同样的问题,经过多次努力得出的结论是记事本在该行中写入文件三次(!)。如果一个应用程序真的经常保存(可能是三角测量备份等),那么您对此无能为力。我还注意到您已经附加了所有事件,您应该将其缩小到您需要的最低限度,并使用NotifyFilters过滤掉您不感兴趣的事件。我之前尝试过使用FileSystemWatcher类(很多年前-2008年),但遇到了重大问题。这充其量是一个有漏洞的抽象。我当时在CodeProject上报告了我的发现。在评论列表中查找“Glytzhkof”。我记得在课堂上几乎每个方面都存在问题,但这些年来可能已经有所改善。总而言之,我当时的经验是,事件要么完全消失,要么堆积起来,导致基于变量的异常,例如磁盘的写缓存是否启用,是否访问了RAID、NAS或普通磁盘,以及其他随机硬件我没有看到的问题回想一下。有趣的是,它似乎适用于UNC路径。不知道为什么。映射驱动器失败。查看代码项目讨论中的摘要。我确信自从我尝试以来已经有了一些改进,也许还有一些新错误:-)。磁盘存储硬件似乎很难作为高级抽象来处理——它会泄漏。我个人最终使用服务和常规磁盘功能手动扫描文件。在手动完成之前我浪费了很多时间。更新:在此处查看新信息:https://stackoverflow.com/a/23704476/129130以上是C#学习教程:尽管采取了反对措施,但FileSystemWatcher事件仍引发两个共享的全部内容,如果对大家有用,需要了解更多的C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: