我有这段代码:
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 :(得分:5)
不要将文件名包含在InitialDirectory中。仅限路径。
From msdn:在Windows Vista上,如果将InitialDirectory设置为完整文件名而不是目录路径,则初始目录将默认为应用程序路径或用户上次选择的目录一份文件。
答案 1 :(得分: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
答案 2 :(得分:3)
我的路径看起来像这样:“C:/ xxxx / yyyyy” 切换到反斜杠后它工作正常,我的路径现在看起来像这样:“C:\ xxxxx \ yyyyy”
答案 3 :(得分:1)
我得到了这样的代码:
dialog.InitialDirectory = Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%") + "\\Videos";
答案 4 :(得分:1)
我也尝试过在不同的地方找到不同的“解决方案”,但是一旦注册表中有MRU列表条目,它们似乎都没有工作:/但这是我自己的简单解决方法......
不是设置对话框的InitialDirectory
属性,而是将FileName
属性设置为您的路径,但与选定的Filter
结合使用,例如:
dialog.FileName = Path.Combine(myPath, "*.*");
答案 5 :(得分:0)
我遇到了同样的问题。 当我使用这段代码时:
string imgPath = AppDomain.CurrentDomain.BaseDirectory + @"Images\";
这不会显示初始目录。
但是如果我删除了最后的斜杠:
string imgPath = AppDomain.CurrentDomain.BaseDirectory + @"Images";
所以开始正确显示初始目录。 恢复反斜杠不会导致不正确的节目,我不明白,但事实确实如此。
答案 6 :(得分:0)
我也遇到了问题,它只显示最后使用的目录。我正在使用没有驱动器号的网络路径。我需要添加另一个" \"在服务器名称前面。
这不起作用:
openFileDialog1.InitialDirectory = "\\\servernam01\\group.data\\EXTERNAL PROJECTS\\VSCHART\\ercotfiles\\";
但这确实有效:
openFileDialog1.InitialDirectory = "\\\\servernam01\\group.data\\EXTERNAL PROJECTS\\VSCHART\\ercotfiles\\";
答案 7 :(得分:0)
这发生在我身上,但问题不同了。我在InitialDirectory
使用的路径中输入了一个拼写错误。当我解决这个问题时,我很好。如果发生这种情况,请检查输出窗口:
A first chance exception of type 'System.IO.FileNotFoundException'
occurred in System.Windows.Forms.dll
答案 8 :(得分:0)
在我的情况下它不起作用,因为' InitialDirectory'不存在。
if (!Directory.Exists(InitialDirectory))
Directory.CreateDirectory(InitialDirectory);
答案 9 :(得分:0)
我已经尝试过给出的解决方案,但没有成功,但对我有用的是删除尾随" /"从我的路上。
arguments
然后它正常工作。
答案 10 :(得分:0)
请在发送InitialDirectory
之前包括此功能。
public static string NormalizePath(string path)
{
if (path != "")
{
return Path.GetFullPath(new Uri(path).LocalPath)
.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)
.ToUpperInvariant();
}
else
{
return "";
}
}
答案 11 :(得分:-1)
我也遇到过这个问题。以下是我修复它的方法:
假设bakDir是一个字符串,其中包含OpenFileDialog所需的初始目录路径。
OpenFileDialog openFile = new OpenFileDialog();
if (!Directory.Exists(bakDir))
{
Directory.CreateDirectory(bakDir);
}
openFile.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory + @"DbBackups";
当你完成所选文件的操作时,请调用:
openFile = null;