Windows XP下的程序路径(C#程序)

时间:2011-10-07 11:57:30

标签: c# path windows-xp .net-2.0

我的程序在Windows 7 / Vista以及我测试过的大多数Windows XP上运行良好。我打开一个文件,该文件是程序本身下的1个目录。它是Administration \ adm.txt(这正是我使用的相对目录)。我正在为我的项目使用.NET 2.0。 我试图在旧的Windows XP(安装了.NET 2.0)上运行我的程序,我得到了我生命中见过的最奇怪的错误。程序运行正常,直到用户打开一个打开的文件对话框。之后程序开始认为它位于打开文件对话框的最后一个目录中。因此,如果打开文件对话框上次浏览C:\ My Documents \,我尝试打开Administration \ adm.txt文件,我得到一个例外,“C:\ My Documents \ Administration \ adm.txt”不存在。不幸的是我不能再自己使用那台电脑,但我真的很想知道这是怎么发生的。有没有人有任何想法?

2 个答案:

答案 0 :(得分:2)

Windows中的标准行为是文件对话框更改应用程序的当前目录。您可以使用OFN_NOCHANGEDIR标志阻止它进入OPENFILENAME structure 用于配置opensave对话框。

关于这个故事,请参阅Old New Thing博客:

http://blogs.msdn.com/b/oldnewthing/archive/2010/11/12/10089878.aspx

答案 1 :(得分:0)

除了tinman的回复之外,我还要补充一点,使用与当前目录相关的目录并不是一个好主意,因为其他进程(包括您自己的进程)可以更改当前目录。以下代码是在程序目录下的目录中创建文件名的更可靠方法:

string exeDirectory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string fileName = System.IO.Path.Combine(exeDirectory, System.IO.Path.Combine("Administration", "adm.txt"));
相关问题