在昨天以前,一直以为 Environment.CurrentDirectory 属性值始终是指当前应用程序文件所在的目录,直到被 FileNotFoundException 异常所惊醒。在 MSDN 中,CurrentDirectory 属性的描述为:获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
通过调试发现,FileOpenDialog 会改变该当前目录的值。当用户通过 文件打开对话框 选取文件后,当前目录的值将变成用户所选择文件所在的目录。因此如果依赖该属性来定位某个固定的文件的位置,那么是要被 FileNotFoundException 之类的异常打扰D。如果需要始终定位到当前应用程序所在的位置,可以用 System.Windows.Forms.Application.StartupPath 来获取,当前也可以用 System.Reflection.Assembly.GetEntryAssembly().Location 来获取当前入口/主线程的所在集合文件的路径(包含文件名),如果只需要目录部分的字符串则可使用 System.IO.Path.GetDirectoryName() 来截取。