Visio VSTO 中的 .NET OpenFileDialog FileNotFoundException 即使工作正常

.NET OpenFileDialog FileNotFoundException in Visio VSTO even though works fine

为了让用户在基于 VB.NET 的 Visio VSTO 解决方案中打开 Visio 模具,我将 OpenFileDialog 对象与我在 Whosebug 上找到的一些代码一起使用。

即使对话框工作正常并且我得到了用户选择的文件的文件名,但在成功时我也得到了这个异常:

Exception thrown: 'System.IO.FileNotFoundException' in System.Windows.Forms.dll

这是我使用的代码:

Imports System.Windows.Forms

    Friend Function OpenNewStencilFileDialog() As String

    Dim fd As OpenFileDialog = New OpenFileDialog()
    Dim strFileName As String

    fd.Title = "Open the Visio Stencil you want to use!"
    fd.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "My Shapes"
    fd.Filter = "Visio Macro-Enabled Stencil Files (*.vssm)|*.vssm|Visio Stencil Files (*.vssx)|*.vssx"
    fd.FilterIndex = 2
    fd.RestoreDirectory = True

    If fd.ShowDialog() = DialogResult.OK Then
        strFileName = fd.FileName
    Else
        strFileName = ""
    End If

    Return strFileName

End Function

我不知道为什么我在用户成功选择文件(选择文件 + 在文件对话框中按确定)时收到此错误,当我在文件对话框中取消时我收到同样的错误。

虽然代码工作正常,当然异常——你不知道——为什么你得到——它们很糟糕,非常感谢您对为什么会出现此错误的洞察力!

你有错误 OpenFileDialog.InitialDirectory 我认为,你应该确保路径存在。难道你只是缺少路径分隔符。

fd.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + Path.PathSeparator + "My Shapes"

使用File.Exists方法判断指定文件是否存在

方法 returns true 如果调用者具有所需的权限并且路径包含现有文件的名称;否则,false。如果路径为空、无效路径或零长度字符串,此方法也 returns false。如果调用者没有足够的权限来读取指定的文件,则无论路径是否存在,都不会抛出异常并且方法 returns false。

要检查路径是否包含任何无效字符,您可以调用GetInvalidPathChars method to retrieve the characters that are invalid for the file system. To check if a directory exists, see Directory.Exists

请注意,在您调用 Exists method and perform another operation on the file, such as Delete.

期间,另一个进程可能会对文件执行某些操作

允许路径参数指定相对或绝对路径信息。相对路径信息被解释为相对于当前工作目录。要获取当前工作目录,请参阅 GetCurrentDirectory.