代码删除文件夹,小心资源管理器报错,甚至崩溃【原】
前两天,同事提了个需求,要在产品卸载时需要清除日志和用户信息,说白了就是要删除几个目录,心想小case,立马开始code,递归(FindFirstFile&FindNextFile)删除目录里的文件(DeleteFile),最后RemoveDirectory, 编码完后,本地验证ok, 代码提交,等待出包。
结果出包完,自己安装完再卸载,结果系统资源管理器报错了,说什么引用了不存在的目录。。。。,一时也没想出咋回事,只知道肯定是自己添加的这段代码导致的。但上崔着要出包,只好回退代码 ,解决问题下个版本再上了。
然后就开始调试代码 ,F10跟了一遍,日志也打了,没发现有什么问题,目录也删除成功了呀。如此试了好几遍,还检查了其他相关的代码,都没发现问题。折腾了几遍,终于发现规律了,原来当你在资源管理器中打开了你要删除的目录时,这时你执行代码强制删除这个目录,系统就会报错,甚至导致资源管理器重启。到这问题算是找到了,怎么解决?首先想到的方法就是,只删除文件夹中的文件而不删除目录。方法二就是检测文件夹是否被打开,如果是,就不删除目录。我选择了方法一,屏掉两行代码,问题解决。至于方法二,我没找到方法去检测一个文件夹是否在资源管理器中被打开。哪位大牛如果知道如何用C++代码实现方法二,请不吝告之,谢谢。
好了,就是这样了,吃一堑长一智,下次注意。
在等待的日子里,刻苦读书,锻炼身体,谦卑做人,养得深根,日后才能枝叶茂盛。