OpenFileDialog InitialDirectory不起作用

时间:2012-01-11 10:07:15

标签: c# winforms openfiledialog

我有这段代码:

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?

相同的问题

12 个答案:

答案 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)

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

我的路径看起来像这样:“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;