【发布时间】:2012-02-21 00:33:37
【问题描述】:
好的,所以我已经在很多地方搜索过这个问题的答案,但是如果我错过了一些明显的东西,我愿意接受任何链接。
我有兴趣在用户尝试打开特定文件时向他们提供合理的错误消息,但无论出于何种原因程序无法访问该文件。我想区分以下几种情况:
- 该文件已被另一个进程锁定,因此该进程无法对其进行写入。
- 用户没有适当的访问权限来写入文件(例如,他们的用户权限,如 Windows 资源管理器中文件的“属性”屏幕所示,不授予用户写入权限)
- 该文件需要“提升”权限才能访问该文件。
我正在使用 FileStream 对象。我看过msdn documentation for instantiating a FileStream,我完全不清楚哪个异常对上述内容做了什么,以及如何区分它们。我承认我在 Windows 编程方面的经验是有限的,所以我可能遗漏了一些明显的东西。如果是这样,我很抱歉。
【问题讨论】:
-
您要检查的最后两个案例之间有区别吗?我可以想象(虽然还没有证明)他们都会抛出一个
SecurityException,而第一个案例会抛出一个IOException。 -
@M.Babcock:在某些方面,最后两种情况并没有太大的不同。但是,用户必须(通常)做非常不同的事情才能访问文件。对于第二种情况,他们可能需要请求另一个用户授予他们权限。对于第三种情况,他们需要“以管理员身份运行”或者可能将文件移出“程序文件”目录(尽管我不知道它为什么会在那里)。我想帮助用户了解他们需要做什么才能访问该文件。
-
再一次,我可能在我之前的评论中表现出我对 Windows 操作系统的无知 - 如果我的解释不正确,我愿意更正。
-
有道理。听起来您正在寻找的东西应该可以通过一系列测试和检查抛出的异常来发现。只是预感,您也许可以使用
SecurityException的HResult属性来确定根本原因。
标签: c# exception-handling filestream