[WPF Bug清单]之(3)——暗中创建文件的打开文件对话框
这个Bug可以简单描述为:在使用OpenFileDialog尝试打开一个不存在的文件的时候,OpenFileDialog本身会创建这个不存在的文件并删除它,然后告诉用户这个文件不存在。
下面我们来写个程序来重现这个Bug。基本原理是使用FileSystemWatcher来监视文件夹。
创建使用了如图1所示的程序。
图1. 示例程序
首先选择一个文件夹,并监视里面的文件改变。
图2. 监视文件夹
然后在被监视的文件中尝试打开一个不存在的文件。这个打开文件对话框已经设置CheckFileExists和CheckPathExists为true。
方法很简单,只要在File Name中随便输入一个不存在的文件名,然后点打开就可以了。如图3所示。
图3. 打开不存在的文件
然后打开文件对话框“貌似”很乖地弹出了一个消息框,说文件不存在。如图4。
图4. 文件不存在消息框
然后我们点取消。但是,我们会发现后面的Output Message里有了变化。如图5所示。
图5. 不合理的文件创建与删除
由于打开文件对话框实际就是一个API调用。没有像Reflactor一样的简单的方式去看它的实现。
而且在源代码中,也加入了FileIOPermission来禁向监视文件中写入。但是完全没有效果。其实这也算是另一个安全漏洞。因为.NET Framework在调用API之前应该对相关Permission进行检查。但是事实上没有进行这样的检查。(也许MS有其它方面的考虑吧)
PS:WinForm中的打开文件对话框也有这样的问题,所以也不能完全算WPF的BUG,但是毕竟在WPF的Assembly里有这个问题,就放了进来。(没有看代码,应该是调用的一个API)
同系列的其它文章:
[WPF Bug清单](序)与之(1)——可以多选的单选ListBox
[WPF Bug清单]之(2)——RadioButton的IsChecked绑定失效
[WPF Bug清单]之(4)——点击RadioButton的空白没有反应
[WPF Bug清单]之(5)——隐藏模态对话框后变成非模态
[WPF Bug清单]之(6)——Button的IsCancel属性失效
[WPF Bug清单]之(7)——顽固的Error Template
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?