[WPF Bug清单]之(3)——暗中创建文件的打开文件对话框

这个Bug可以简单描述为:在使用OpenFileDialog尝试打开一个不存在的文件的时候,OpenFileDialog本身会创建这个不存在的文件并删除它,然后告诉用户这个文件不存在。

 

下面我们来写个程序来重现这个Bug。基本原理是使用FileSystemWatcher来监视文件夹。

 

创建使用了如图1所示的程序。

 

1. 示例程序

 

首先选择一个文件夹,并监视里面的文件改变。

 

2. 监视文件夹

 

然后在被监视的文件中尝试打开一个不存在的文件。这个打开文件对话框已经设置CheckFileExistsCheckPathExiststrue

方法很简单,只要在File Name中随便输入一个不存在的文件名,然后点打开就可以了。如图3所示。

 

3. 打开不存在的文件

 

然后打开文件对话框“貌似”很乖地弹出了一个消息框,说文件不存在。如图4

 

 

4. 文件不存在消息框

 

然后我们点取消。但是,我们会发现后面的Output Message里有了变化。如图5所示。

 

5. 不合理的文件创建与删除

 

由于打开文件对话框实际就是一个API调用。没有像Reflactor一样的简单的方式去看它的实现。

 

而且在源代码中,也加入了FileIOPermission来禁向监视文件中写入。但是完全没有效果。其实这也算是另一个安全漏洞。因为.NET Framework在调用API之前应该对相关Permission进行检查。但是事实上没有进行这样的检查。(也许MS有其它方面的考虑吧)

 

PSWinForm中的打开文件对话框也有这样的问题,所以也不能完全算WPF的BUG,但是毕竟在WPF的Assembly里有这个问题,就放了进来。(没有看代码,应该是调用的一个API

 

同系列的其它文章:

[WPF Bug清单]()与之(1)——可以多选的单选ListBox

[WPF Bug清单](2)——RadioButtonIsChecked绑定失效

[WPF Bug清单](4)——点击RadioButton的空白没有反应

[WPF Bug清单](5)——隐藏模态对话框后变成非模态

[WPF Bug清单](6)——ButtonIsCancel属性失效

[WPF Bug清单](7)——顽固的Error Template

[WPF Bug清单](8)——RowDefinitionMaxHeight在一定条件下失效

[WPF Bug清单](9)——消失的光标

posted on   南柯之石  阅读(3295)  评论(10编辑  收藏  举报

编辑推荐:
· 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,谁才是开发者新宠?

导航

< 2008年12月 >
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

统计

点击右上角即可分享
微信分享提示