2012-01-11 71 views
5

我有这样的代码:打开文件对话框InitialDirectory不起作用

OpenFileDialog dialog = new OpenFileDialog(); 
dialog.InitialDirectory = GetDataPath(...); 
dialog.AutoUpgradeEnabled = false; 
dialog.Filter = GetFilter(...); 
if (dialog.ShowDialog(this) == DialogResult.OK) 
{...} 

我希望,在每次运行时,要在同一个文件夹对话框 - GetDataPath(...)文件夹,但它仍然在最后所选文件夹。

这是正确的行为吗?你知道如何解决这个问题吗?如果Windows在注册表中保存上次使用的路径,您是否知道如何找到它?

EDIT1:

有了:

dialog.AutoUpgradeEnabled = true; 

按预期工作...

EDIT2:这里同样的问题Any known problems with getting SaveFileDialog's InitialDirectory property working in Windows 7?

+0

[设置SaveFileDialog的初始目录?](http://stackoverflow.com/questions/1175242/setting-the-initial-directory-of-an-savefiledialog) – 2012-01-11 10:10:02

+0

注意InitialDirectory没有被使用如果你有一个选定的FileName(s)...不是你的示例代码中的情况。 – zeFrenchy 2012-01-11 10:16:54

+0

@Cody Gray不重复。我已经尝试过这种解决方案,它不起作用 – Felics 2012-01-11 10:32:01

回答

3

它可能需要设置RestoreDirectory

OpenFileDialog dialog = new OpenFileDialog(); 
dialog.InitialDirectory = GetDataPath(...); 
dialog.RestoreDirectory = true; 
dialog.AutoUpgradeEnabled = false; 
dialog.Filter = GetFilter(...); 
if (dialog.ShowDialog(this) == DialogResult.OK) 
{...} 

入住这link

+0

问题遗迹。我已经尝试过。 – Felics 2012-01-11 10:31:14

1

我得到的代码工作是这样的:

dialog.InitialDirectory = Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%") + "\\Videos";

-1

我一直有这个问题了。下面是我如何修复它:

假设bakDir是一个字符串,它包含OpenFileDialog所需的初始目录路径。

 OpenFileDialog openFile = new OpenFileDialog(); 
     if (!Directory.Exists(bakDir)) 
     { 
      Directory.CreateDirectory(bakDir); 
     } 
     openFile.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory + @"DbBackups"; 

当你完成与选择的文件做你的事,称此:

 openFile = null; 
1

我也尝试了多种不同的“解决方案”在不同的地方发现的,但没有人似乎工作只要有在注册表中的MRU列表条目:/但这里是我自己简单的解决方法......

而不是设置对话框的InitialDirectory属性,设置FileName属性到您的路径,但所选择的合并,例如:

dialog.FileName = Path.Combine(myPath, "*.*"); 
5

Do not include filename to InitialDirectory。只有路径。

From msdn:在Windows Vista上,如果InitialDirectory设置为完整文件名而不仅仅是目录路径,则初始目录将默认为应用程序路径或用户最后选择文件的目录。

0

我有同样的问题。 当我用这个代码:

string imgPath = AppDomain.CurrentDomain.BaseDirectory + @"Images\"; 

,这并不表明初始目录。

但如果我删除了最后的斜线:

string imgPath = AppDomain.CurrentDomain.BaseDirectory + @"Images"; 

所以正确地开始显示初始目录。 恢复反斜杠不会导致不正确的显示,我不明白,但它是如此。

2

对我来说那些答案没有帮助(Windows 7)。

我的路径是这样的: “C:/ XXXX/YYYYY” 切换反斜杠它好工作后,我的路现在看起来是这样的: “C:\ XXXXX \ YYYYY”

0

我有一个问题这也是它只显示最后使用的目录的地方。我正在使用没有驱动器号的网络路径。我需要在服务器名称前添加另一个“\”。

这不起作用:

openFileDialog1.InitialDirectory = "\\\servernam01\\group.data\\EXTERNAL PROJECTS\\VSCHART\\ercotfiles\\"; 

但这并工作:

openFileDialog1.InitialDirectory = "\\\\servernam01\\group.data\\EXTERNAL PROJECTS\\VSCHART\\ercotfiles\\"; 
0

这是发生在我身上,但问题是不同的。我在用于InitialDirectory的路径中有一个错字。当我解决这个问题时,我很好。如果这发生在你检查你的输出窗口此:

A first chance exception of type 'System.IO.FileNotFoundException' 
occurred in System.Windows.Forms.dll 
0

在我的情况下,它是行不通的,因为“InitialDirectory”根本不存在。

if (!Directory.Exists(InitialDirectory)) 
     Directory.CreateDirectory(InitialDirectory); 
0

我试图给出的解决方案,但没有成功,但什么工作对我来说,是从我的路径中删除“/”结尾。

path = path.TrimEnd(new char[] { '\\' }); 

然后它工作正常。