【问题标题】:C# OpenFileDialog: The filename, directory name, or volume label syntax is incorrectC# OpenFileDialog:文件名、目录名或卷标语法不正确
【发布时间】:2023-03-11 21:37:02
【问题描述】:

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

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

在搜索错误时,我找到了以下文档:https://msdn.microsoft.com/en-us/library/ms832054.aspx。所以我猜测文件名包含非法字符。我尝试使用 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 文档?

【问题讨论】:

  • sender as SaveFileDialog?不是OpenFileDialog

标签: c# visual-studio sharepoint visio openfiledialog


【解决方案1】:

由于 Visio 不提供 app.GetOpenFilename API,因此您很不走运。但是你可以使用另一个办公应用程序来做同样的事情。以 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就足够了,也许就足够了。

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 2019-05-24
    • 2019-09-30
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多