如何读取在c#中打开的文件?

时间:2011-02-25 16:22:26

标签: c# file-io

  

可能重复:
  Read file which is in use?

我有一个mvvp-wpf应用程序..我使用infragistics来读取文件。当文件打开时......如果我尝试通过应用程序读取文件,我会得到一个例外。

解决此问题的一种方法是......要求用户关闭文件。

还有其他解决方案吗?

提前致谢!

4 个答案:

答案 0 :(得分:3)

尝试以最少的权限打开它,例如不要求独占读或写锁。

答案 1 :(得分:1)

你可以尝试:

FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, System.IO.FileShare.ReadWrite)

以非独占模式打开文件。

答案 2 :(得分:1)

异常的类型在这里有所帮助,但我能说的是:当程序打开文件时,它为OpenFile api提供了两个参数:

  • 所需的访问权限:读,写,两者?
  • 分享模式:独家,分享阅读,分享写,分享删除?

根据文件第一次打开的方式,您可能会或可能不会再次打开它:如果它已经以共享模式打开,例如,您将无法再次打开它别的什么。

答案 3 :(得分:0)

经过一些搜索后,我找到了解决此问题的方法: 使用文件名创建FileStream对象,并将FileMode.Open,FileAccess.Read,FileShare.ReadWrite作为参数。

看起来Excel在XLS文件运行时保持写锁定并打开文件,因此我们需要在ReadWrite fileshare模式下打开文件。

您可以将此FileStream对象作为参数传递给Workbook.Load方法,而不是文件名,然后程序将能够在Excel中打开时读取该文件。

FileStream selectedFileStream = new FileStream(currentFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Workbook internalWorkBook = Workbook.Load(selectedFileStream);