[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)——消失的光标

原文地址:https://www.cnblogs.com/nankezhishi/p/WPFBug3.html