OpenFileDialog在XP上会更改working directory
今天碰到一个奇怪的bug。我写了一个C#的tool用来parsing一些binary的文件,此程序运作流程如下:
1. 用OpenFileDialog让用户选取parsing的binary文件
2. 程序读取一个parsing过程会用到的参数设置档(放在和执行档同一个目录下)
3. parsing binary并且把结果写到一个新的文件
看起来很正常的流程,在第二步读取设置档时却会一直传递找不到文件的错误信息。而且很奇怪的是这段程序在Win7上可以执行,在XP上却不能执行。找了很久才发现在XP上执行OpenFileDialog会更改working directory,造成我用相对路径开档时会找不到设置档。而Win7的working directory在执行OpenFileDialog并不会被更改。
以下是一个简单的范例程序可以看出working directory在执行OpenFileDialog后会被改掉:
- var dlg = new Microsoft.Win32.OpenFileDialog();
- workingDirectory = Directory.GetCurrentDirectory(); // Correct
- if (open.ShowDialog() == DialogResult.OK) {
- workingDirectory = Directory.GetCurrentDirectory(); // Wrong!!
- }
上面例子执行后会发现workingDirectory最后会被设置成OpenFileDialog选取文件的那个文件夹。
还好网络上蛮多人碰到这个问题,解决方法很简单,只要把RestoreDirectory设成true就可以了,这个Property在WPF以及Windows Form的FileDialog中都有定义:
- var dlg = new Microsoft.Win32.OpenFileDialog();
- dlg.RestoreDirectory = true;
- workingDirectory = Directory.GetCurrentDirectory();
- if (open.ShowDialog() == DialogResult.OK) {
- workingDirectory = Directory.GetCurrentDirectory();
- }
执行后可以发现执行完OpenFileDialog后working directory不会被改掉了。至于为什么Win7的working directory不会被改掉,顶测可能是因为系统底层的差异的缘故吧。大家在用xp系统的时候要特别注意就行。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
