C# C OpenFileDialog:文件名、目录名或卷标语法不正确

C# C OpenFileDialog:文件名、目录名或卷标语法不正确,c#,visual-studio,sharepoint,visio,openfiledialog,C#,Visual Studio,Sharepoint,Visio,Openfiledialog,我需要在Visio中以编程方式从Sharepoint打开文档。但当我导航到网络文件夹时,选择一个文档并单击“打开”,我会 获取以下错误: 文件名、目录名或卷标语法不正确 搜索错误时,我找到了以下文档:。所以我猜文件名包含非法字符。我尝试使用FileOk事件覆盖文件名的验证: public void openFile() { OpenFileDialog sf = new OpenFileDialog(); sf.FileOk += openFileDialog_FileOk;

我需要在Visio中以编程方式从Sharepoint打开文档。但当我导航到网络文件夹时,选择一个文档并单击“打开”,我会 获取以下错误:

文件名、目录名或卷标语法不正确

搜索错误时,我找到了以下文档:。所以我猜文件名包含非法字符。我尝试使用FileOk事件覆盖文件名的验证:

public void openFile() {
    OpenFileDialog sf = new OpenFileDialog();
    sf.FileOk += openFileDialog_FileOk;
    if (sf.ShowDialog() == DialogResult.OK)
    {
        var app =(Microsoft.Office.Interop.Visio.Application)context.Application;
        app.Documents.Open(sf.FileName);
    }
}

private void openFileDialog_FileOk(object sender, CancelEventArgs e)
{
    var sfd = sender as OpenFileDialog;
    var file = new FileInfo(sfd.FileName);
    if (file.Name.Contains('#'))
        e.Cancel = true;
}
但事件并未发生。使用标准Visio界面,可以从Sharepoint打开文件,但文件对话框看起来有点不同:


如何获得类似的文件对话框?因此,我的问题是:如何以编程方式从Sharepoint网络文件夹中打开Visio文档?

由于Visio不提供app.GetOpenFilename API,您运气不好。但是你也可以使用另一个office应用程序来实现同样的功能。例如Excel:

var excel = new Excel.Application();
var fileName = excel.GetOpenFilename();
excel.Quit();

var visio = new Visio.Application();
visio.Documents.Open(fileName);
它提供了一个类似的对话框和正常的url,Visio API可以理解它,没有任何问题

问题可能是Visio API不理解带有@SSL部分的UNC DAV文件路径格式,该格式由默认内置OpenFileDialog提供,也可能是其他格式。检查默认对话框返回的.FileName的值。顺便说一句,为了防止出现错误消息,设置sf.CheckFileExists=false就足够了。

sender as SaveFileDialog?不是OpenFileDialog?