我有一个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)
你是怎么打算打开文件的?
如果您尝试打开它进行读/写,那么您将获得异常.如果你试图打开它只读,那么你应该没问题.
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不够好,我发现甚至更奇怪.