【问题标题】:Avoid System.Runtime.InteropServices.COMException by detecting a system folder before writing a file通过在写入文件之前检测系统文件夹来避免 System.Runtime.InteropServices.COMException
【发布时间】:2011-05-16 00:05:27
【问题描述】:

我有一个 vb .net 应用程序,用户可以在其中选择写入 excel 文件的目录。如果用户选择了一个系统目录(是的,我的用户这样做,不要问我为什么),那么在运行时会抛出 System.Runtime.InteropServices.COMException。

我正在处理这个异常,告诉用户请选择另一个目录。

我的应用程序工作正常,但我真的很想知道如何检测目录是否允许在抛出异常之前将文件写入其中。

不,使用 System.IO.DirectoryInfo 并不能解决问题......或者它可以,但我还不够好。

谢谢!

【问题讨论】:

    标签: vb.net windows-7 windows-vista


    【解决方案1】:

    尝试在目标文件夹中创建一个虚拟文件,如果成功则将其删除 - 如果它(创建)失败,则很有可能无法将 .xls(x) 文件保存在那里!确信 DirectoryInfo 将允许检测系统文件/文件夹,但是,虚拟文件​​技巧是检查任何文件夹权限的一种廉价方法。

    【讨论】:

    • 是的,我当然想到了虚拟文件,但它和我现在的差不多:处理运行时抛出的异常。我只是想知道是否有更优雅的方式来做到这一点。不过感谢您的回答。
    • FileIOPermission (msdn.microsoft.com/en-us/library/…) 听起来很有希望,但在我看来,如果权限被拒绝,所有道路都会引发异常。您使用的是 SaveFileDialog 吗?如果是这样,这是否具有允许在接受用户选择之前检查目的地的属性? OnFileOk 看起来像是验证所选文件的合适挂钩。
    • 实际上没有 SaveFileDialog... 我有一个设置屏幕,用户可以在其中选择默认目录。我正在使用 OpenFileDialog 让用户选择文件夹......因为 FolderBrowserDialog 是如此 ugggghhh .. 我想要做的是精确地使用 OnFileOk 事件进行检查。我将看看您建议的 FileIOPermission 类并让大家知道。谢谢!
    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多