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.
为了让用户在基于 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.