验证SaveFileDialog的InitialDirectory是否有效?

4

我正在打开一个SaveFileDialog,初始目录是基于用户定义的路径。在传递路径并打开对话框之前,我希望确保该路径有效。现在我有以下代码:

Microsoft.Win32.SaveFileDialog dialog = new Microsoft.Win32.SaveFileDialog();

if (!string.IsNullOrEmpty(initialDirectory) && Directory.Exists(initialDirectory))
{
    dialog.InitialDirectory = initialDirectory;
}

bool? result = dialog.ShowDialog();

然而,似乎\会被忽略,在我调用ShowDialog时导致崩溃。还有其他可能导致崩溃的值吗?InitialDirectory属性需要遵循哪些规则?


你为什么要绕过一个错误?修复这个错误。 - Hans Passant
这就是我想做的...但首先我需要知道如何在将用户输入发送到SaveFileDialog之前验证它。 - RandomEngy
SaveFileDialog已经为您完成了,没有必要自己做。同样,不要通过避免设置InitialDirectory属性来隐藏错误。异常是有用的,它告诉您代码出现问题并需要您的注意。 - Hans Passant
3
异常是一个ArgumentException:“值不在预期范围内。” 这就是这个问题的关键。找出预期“范围”是什么。显然它没有进行任何验证,因为它刚刚崩溃了。我的工作是获取用户输入的字符串,并将其传递给SaveFileDialog,以便它不会向我抛出ArgumentException。或者你是在告诉我只需捕获ArgumentException吗? - RandomEngy
1个回答

9

解决问题的快速简便方法是获取完整路径:

dialog.InitialDirectory = Path.GetFullPath(initialDirectory);

这将把相对路径扩展为SaveFileDialog所需的绝对路径。这将扩展几乎所有类似路径的东西为完整的根路径。这包括像"/"(变成当前文件夹所在驱动器的根)和""(变成当前文件夹)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接