为什么路径会发生变化

时间:2010-07-21 08:34:50

标签: c# winforms desktop-application

我有代码,它以两种不同的形式检索一个目标路径。如果,在一种形式中,我选择一个路径来打开文件并处理它,当返回到另一个表单时,我收到一个Direcotry Exception错误。我习惯使用不同的字符串来获取该路径

在第二种形式中我称之为:

       string strFilePath2;
       strFilePath2 = Directory.GetCurrentDirectory();
       strFilePath2 = Directory.GetParent(strFilePath2).ToString();
       strFilePath2 = Directory.GetParent(strFilePath2).ToString();
       strFilePath2 = strFilePath2 + "\\ACH";

在我的第一个表格中,我打电话给:

       strFilePath = Directory.GetCurrentDirectory();
       strFilePath = Directory.GetParent(strFilePath).ToString();
       strFilePath = Directory.GetParent(strFilePath).ToString();
       strFilePath = strFilePath + "\\ACH\\" + Node;

在调试期间,我从第二种形式获取所选路径,但不是我预期的路径。任何人都可以说出原因吗?

3 个答案:

答案 0 :(得分:8)

您是否检查了当前目录的值?

OpenFileDialog通常会更改当前目录。您可以使用RestoreDirectory属性控制该行为:

OpenFileDialog ofd = new OpenFileDialog();

ofd.RestoreDirectory = true ; // this will not modify the current directory

顺便说一句,您正在连接代码示例中的路径。在.NET中,最好使用静态Path.Combine方法。此方法将检查是否存在反斜杠(或系统的路径分隔符是什么),并在缺少时自动插入一个:

strFilePath = Path.Combine(strFilePath, "ACH");

答案 1 :(得分:3)

这通常取决于FolderBrowserDialogOpenFileDialog或类似内容的调用。这些对话框(和其他组件)会自动更改正在运行的应用程序的工作目录。

我的建议是,如果有任何类型的用户互动,请避免使用相对路径。

答案 2 :(得分:3)

OpenFileDialogSaveFileDialog会改变当前的工作路径,这非常烦人。您可以手动重置此设置,也可以设置.RestoreDirectory = true;以在选择文件后将其更改回来。如果您使用FolderBrowserDialog,如果仍然遇到此问题,则必须手动执行此操作。