C# Environment.CurrentDirectory(获取当前工作目录)与OpenFileDialog在XP系统上面引起的bug

参考自:(关于C#中程序当前目录的小随笔)https://www.cnblogs.com/mayswind/archive/2013/06/12/3119570.html

问题描述:
  读写配置文件时,通过Environment.CurrentDirectory获取程序根目录,然后发现使用OpenFileDialog打开文件后,无法读写配置文件。

分析:
  Environment.CurrentDirectory获取的目录不一定就是桌面程序的安装根目录,OpenFileDialog有个属性RestoreDirectory(获取或设置一个值,该值指示对话框在关闭前是否还原当前目录),RestoreDirectory设置为true以后再执行文件对话框OpenFileDialog是不会更改当前目录(即Environment.CurrentDirectory)的,Win7默认的RestoreDirectory为true,而XP默认的为false。因此,导致在XP系统上面打开文件对话框会使得Environment.CurrentDirectory的值变化,进而导致读取配置文件时候的路径也变化,最终读写文件失败(读写配置的代码中设置了:如果找不到文件,直接返回,不会报错,这直接导致这个bug被完美的隐藏了)。
  最后,分析日志文件时发现:程序根目录下面的一个文件路径每次打开OpenFileDialog后就变化,同时,偶然间在这个博客上面看到类似的问题(https://www.cnblogs.com/mayswind/archive/2013/06/12/3119570.html),原来问题就在于Environment.CurrentDirectory的值可能会被OpenFileDialog改变。不过,每次程序重新启动的时候Environment.CurrentDirectory的值就是程序的根目录。

解决方法:
  改用其他方法获取程序根目录,例如:System.Windows.Forms.Application.StartupPath(应用程序的可执行文件的路径,经测试,在XP系统上面不会被OpenFileDialog修改)。也可参考博客:https://www.cnblogs.com/TandyChan/p/5992960.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值