参考:
https://blog.csdn.net/qq_29892543/article/details/109843321?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link
使用 FileStream fs = File.OpenRead(Path) 读取已经打开的Excel文档时,被提示已经被另一个程序占用。
发现这个OpenRead就一个方法。
然后只能使用其他的方法,写法如下:
FileInfo fi = new FileInfo(Path);
FileStream fs = fi.Open(FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
或者
FileStream fs = File.Open(Path,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
或者
FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
上面三个写法功能一样,具体看 FileMode.Open,FileAccess.Read,FileShare.ReadWrite
FileMode 代表你需要进行什么操作。
FileAccess 代表你需要访问的权限。
FileShare 代表你允许共享的权限。
这里需要重点注意的是 FileShare,已经打开的Excel档(此处认为是office程序打开的),
office此时已经获取到了Excel档的 Read和Write的权限了。
如果FileShare写成FileShare.Read,那意思就是你只共享Read权限并独占Write权限,
可是Write权限已经被office先前获取了,所以此处你想独占Write权限,
是不可能的,若执意独占Write权限, 此处会出现 ‘已经被另一个程序占用’ 的提示。
没办法 必须也要把Write权限共享出去,这样权限之间才没有冲突。