我有代码,它以两种不同的形式检索一个目标路径。如果,在一种形式中,我选择一个路径来打开文件并处理它,当返回到另一个表单时,我收到一个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;
在调试期间,我从第二种形式获取所选路径,但不是我预期的路径。任何人都可以说出原因吗?
答案 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)
这通常取决于FolderBrowserDialog
,OpenFileDialog
或类似内容的调用。这些对话框(和其他组件)会自动更改正在运行的应用程序的工作目录。
我的建议是,如果有任何类型的用户互动,请避免使用相对路径。
答案 2 :(得分:3)
OpenFileDialog
和SaveFileDialog
会改变当前的工作路径,这非常烦人。您可以手动重置此设置,也可以设置.RestoreDirectory = true;
以在选择文件后将其更改回来。如果您使用FolderBrowserDialog
,如果仍然遇到此问题,则必须手动执行此操作。