FileWatcher 可以对文件进行监控。但他是一个 托管 类。因为是个小白,之前用到的都是非托管类。在使用过程中出现了许多bug。
先来说一下目标:基于MFC的UI界面,显示监测的目标文件夹更新的图片,并将新增图片名存到文本文档中。
FileWatcher 可以对文件进行监控,并将监测到的数据返回。但此时返回的文件名是 System::String 类。这个类不能直接使用作为一个string字符串类进行保存。在System::String 和 std::String进行转换时出现问题。最终参考 http://blog.sina.com.cn/s/blog_695abcf70100m6ac.html 这篇文章。debug的时候一开始只 监控了 fsWatcher中的变量。监控的是监测到的文件名和转换之后的文件名。出现问题是 监测到的文件名可以正常显示,但是转换之后的文件名不能显示转换后的数据,仍为初始化得到数据。一开始以为是数据转换出问题。后来发现即便转换后的数据debug监控变量时不能正确显示,但是将其传到另一个类里面进行使用得到时候,数据是正确的。此处不知道是什么原因。
一开始的测试是一张一张的图片进行监测,后来是几张图片一起剪切到目标文件夹。(剪切和复制的不同导致数据重复记录的指路-- https://blog.csdn.net/L946494/article/details/105844342)。通过debug发现需要将 fsWatcher 每次监测到的全部数据存储到一个变量中(此处用的是 vector<string>),传变量数据,来进行处理,否则会导致最后只能处理最后一条数据。即一次复制10张图片到文件夹,检测到10条数据的变动,如果不进行全部数据的存储,会导致处理类只能最后获取到第10张图片的数据,只处理第10张。不知道是什么原因。
暂时写到这里,后续补低配版的源代码。