尔冬橙

博客园 首页 新随笔 联系 订阅 管理

最近被xp下的一个.net程序折磨了.原来只要打开OpenFileDialog,程序的当前路径就被更改了.导致程序找不到文件.无法运行.

可是在win8下运行却没有问题,不知是操作系统的bug还是.net的bug.xp系统确实到了该淘汰的地步了,太折磨人了.

最后的办法是:

程序开始允许,记录下当前路径:

 public static string currentDirectory = Directory.GetCurrentDirectory();

用过OpenFileDialog之后:

Directory.SetCurrentDirectory (BackGroundForm.currentDirectory);

后来了解到,OpenFileDialog有一个属性:RestoreDirectory,此属性设置是否在打开文件对话框关闭之后还原当前路径。

但是即使把此属性设置为True,程序还是偶尔会路径出错,可能OpenFileDialog会把当前路径存储到注册表里,下次再继续使用上次获得的当前路径。造成程序混乱。

 

以下网络文章,记录下来,以备不时之需:

关于 FileDialog 的路径问题

InitialDirectory


RestoreDirectory


使用Reset()


每次运行初始位置


运行时记忆


CurrentDirectory初始值


CurrentDirectory改变


有效


True


False


设置的初始值


True


%startup%


False


有效


False


False


设置的初始值


True


%startup%


True


无效或未设置


True


False


上一次运行的值


True


%startup%


False


无效或未设置


False


False


上一次运行的值


True


%startup%


True


有效


重置项


True


设置的初始值


False


%startup%


重置项


无效或未设置


重置项


True


上一次运行的值


False


%startup%


重置项

 

1. FileDialog[1]在使用中,其RestoreDirectory属性很少被用到,这是因为它只与System.Environment.CurrentDirectory的值有关[2](也可以通过System.IO.Directory.GetCurrentDirectory() 方法获取),而与FileDialog实例所使用的路径无关。

2. 当程序中不使用FileDialog.Reset() 方法时,InitialDirectory的值只在程序每次运行第一次调用FileDialog.ShowDialog() 方法时有效,后续调用打开对话框时将使用上一次的路径,这是由系统记忆的[3]

3. 若要在程序中控制任意一次FileDialog.ShowDialog() 所使用的路径,则应将FileDialog.Reset() InitialDirectory属性配合使用,调用Reset方法后FileDialog实例的所有属性均被重置,因此其他必要配置(如FileNameFilterRestoreDirectory属性等)均需要重新指定,但是不需要对事件进行重新关联

posted on 2013-02-03 00:02  尔冬橙  阅读(2256)  评论(0编辑  收藏  举报