silverlight - 检查文件是否被锁定或捕获尝试打开的错误

标签 silverlight filestream silverlight-5.0 openfiledialog

我正在尝试解决用户可以尝试使用 OpenFileDialog 打开由 Excel 打开的文件的问题。

使用简单的FileInfo.OpenRead(),它会抛出一个IOException,“该进程无法访问文件“cakes.xls”,因为它正在被另一个进程使用过程。”这可以很好地向用户显示,除非用户实际上会得到“调试资源字符串不可用”的废话。

似乎无法打开由另一个进程打开的文件,因为使用 FileInfo.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 会抛出 SecurityException,“不允许文件操作。拒绝访问路径 'C:\whatever\cakes.xls'。”,对于任何文件。相当无益。

因此,要么找到某种方法来检查文件是否被锁定,要么 try catch IOException。我不想捕获所有 IOExceptions 并假设它们都是锁定文件错误,因此我需要某种方法将此类异常分类为此错误......但是“调试资源” strings”的废话加上该消息本身可能是本地化的这一事实使得它变得棘手。我部分信任,因此无法使用 Marshal.GetHRForException

那么:是否有任何明智的方法可以检查文件是否被锁定,或者至少确定是否发生此问题而不只是捕获所有 IOException?

最佳答案

我刚刚解决了这个问题:就像阅读文档一样简单。

FileInfo.Open指定:

  • FileNotFoundException - 未找到文件。
  • UnauthorizedAccessException - 该文件是只读的或者是 目录。
  • DirectoryNotFoundException - 指定的路径是 无效,例如位于未映射的驱动器上。
  • IOException - 文件已打开。

因此,捕获所有 IOException 并将它们视为文件已打开问题是安全的,因为指定这是抛出 IOException 的唯一情况。

关于silverlight - 检查文件是否被锁定或捕获尝试打开的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11183067/

相关文章:

Silverlight Canvas 不支持 KeyDown?

javascript - 在 Silverlight 项目中调用异步 javascript 代码

c# - 使用 FileStream 读取 zip 文件,然后使用 CopyTo 损坏该文件

entity-framework - 在IIS中创建一个Silverlight业务应用程序项目

Silverlight MVVM 单元测试说明

c# - 使用 FileStream 和这些选项 c# 读取文本文件的实际内容

c# - SqlFileStream - 插入而不产生空文件

silverlight - 如何在Silverlight应用程序中获取托管网站的URL?

c# - Silverlight 中的对象深拷贝

c# - "tons"点的 Web 图表?