SaveFileDialog抛出System.InvalidOperationException:'My File.xlsx'不是有效的文件名

时间:2013-11-19 14:36:16

标签: c# wpf savefiledialog invalidoperationexception

客户刚刚在我们的应用程序中出现此错误,这在Microsoft.Win32.SaveFileDialog上调用ShowDialog时基本上会发生。完整的堆栈跟踪如下:

  

System.InvalidOperationException:'My File.xlsx'不是有效文件   名称。在Microsoft.Win32.SaveFileDialog.RunFileDialog(OPENFILENAME_I   在Microsoft.Win32.FileDialog.RunLegacyDialog(IntPtr hwndOwner)   在Microsoft.Win32.FileDialog.RunDialog(IntPtr hwndOwner)at at   Microsoft.Win32.CommonDialog.ShowDialog(Window owner)at(我们的代码   这里)

显示对话框的代码非常标准:

var dialog = new SaveFileDialog
    {
        Filter = "Excel files (.xlsx)|*.xlsx",
        FileName = "My File.xlsx",
    };

if (dialog.ShowDialog() == true)
{
    result = dialog.FileName;
}
else
{
    result = null;
}

我们的应用程序是在.NET 4.0框架上运行的WPF应用程序。代码在我的机器上以及在每个其他客户的机器上都能正常工作,但它会为这个特定客户抛出此错误。我尝试对此进行一些研究,但我没有发现可能导致它的任何有用的东西。文件名似乎完全有效。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

似乎此方法在Windows XP或更高版本的Windows上没有相同的行为。

客户正在运行Windows XP,并且正在使用包含/(“My / File.xlsx”)的文件名打开SaveFileDialog。这导致ShowDialog()在显示对话框之前抛出上述错误。但是,错误消息仅包含/之后的文件名部分(在此示例中为“File.xlsx”)。

在Windows 8上,使用包含/的文件名调用ShowDialog没有问题。它只会阻止您保存而不更改名称,因为带有/的名称无效。