【发布时间】:2012-04-10 03:40:33
【问题描述】:
我的一位客户在保存文件时遇到 WPF 应用程序崩溃。
我的存档代码是:
var saveFileDialog = new SaveFileDialog {
InitialDirectory = string.Concat(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), @"\MyApp"),
FileName = "MyFile",
OverwritePrompt = true,
AddExtension = true
};
if (saveFileDialog.ShowDialog() == true) {
...
}
这是他们得到的例外:
Value does not fall within the expected range.
A System.ArgumentException occurred
at MS.Internal.Interop.HRESULT.ThrowIfFailed(String message)
at MS.Internal.AppModel.ShellUtil.GetShellItemForPath(String path)
at Microsoft.Win32.FileDialog.PrepareVistaDialog(IFileDialog dialog)
at Microsoft.Win32.FileDialog.RunVistaDialog(IntPtr hwndOwner)
at Microsoft.Win32.FileDialog.RunDialog(IntPtr hwndOwner)
at Microsoft.Win32.CommonDialog.ShowDialog()
(最后一行中的ShowDialog 指的是我在上面的代码中进行的调用。)
所以我的直觉是,在我的客户的情况下,对 Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) 的调用返回了 SaveFileDialog 不喜欢 InitialDirectory 的内容。我在网络搜索中发现(并经过验证),当将相对路径作为 SaveFileDialog 的 InitialDirectory 传递时会发生此错误。 Environment.SpecialFolder.MyDocuments 是否有可能作为相对路径返回?如果没有,是否有人知道另一种可能无效的格式?某个 SpecialFolder.MyDocuments 网络路径可能是原因吗?还有其他想法吗?
我无法直接访问客户的机器,他们也不是特别精通技术,因此无法 100% 确定发生了什么。
【问题讨论】:
-
是的,两者都不相关。首先是与相对文件路径有关(我在关于 SpecialFolder.MyDocuments 的问题中特别询问了这一点)。第二个有一个我什至看不到与原始问题相关的答案——无论如何,它对我没有帮助。
标签: wpf savefiledialog special-folders argumentexception