如何打开在另一个应用程序中打开的文件

Cal*_*nus 22 c# excel file-io

我有一个winforms应用程序加载excel文件进​​行分析.目前,为了打开excel文件,文件不能在excel中打开,否则当我尝试加载文件时会抛出FileIOException.

我想要做的是允许我的应用程序读取文件,即使它是在excel中打开而不是强迫用户首先关闭工作表.请注意,有问题的应用程序只需要读取文件,而不是写入文件.

这可能吗?

Dar*_*rov 30

您可以在打开文件时尝试传递FileShare.ReadWrite:

using (var stream = new FileStream(
       @"d:\myfile.xls", 
       FileMode.Open, 
       FileAccess.Read, 
       FileShare.ReadWrite))
{

}
Run Code Online (Sandbox Code Playgroud)

  • 对于未来的开放者,FileShare.Read意味着"未来的开放者可以打开文件进行阅读".在过去的开放者的情况下,FileShare.Read意味着"只有当过去的开启者打开它才能阅读时才打开这个文件".这就是为什么需要在这里使用FileShare.ReadWrite,因为Excel打开文件进行编写. (4认同)

Chr*_*isF 6

你是怎么打算打开文件的?

如果您尝试打开它进行读/写,那么您将获得异常.如果你试图打开它只读,那么你应该没问题.

var file = File.Open("file.xls", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)

这仅在Excel打开文件时FileShare.Read设置为允许其他应用程序(即您的)访问该文件.如果未设置此项,则Excel将以独占访问权限打开该文件.注意:我不认为是这种情况,因为您可以打开Excel文件(在Excel中)以供读取,如果有人打开它进行编辑.

更新 - 好的,直到达林的评论之后我没有正确测试.FileShare.ReadWrite尽管有帮助表明它是后续文件切换器,但您需要该标志.甚至FileShare.Read不够好,我发现甚至更奇怪.

  • @darin - 我没有使用FileShare. (2认同)