目前尚不清楚为什么要这样做,但您可以尝试直接在文件流上指定选项,如下所示:
using (var file = new FileStream(@"myfile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
var myPackage = Package.Open(file);
}
更新详细说明何时这可能有用。假设您尝试执行以下操作:
using (var fs1 = new FileStream("myfile", FileMode.Append, FileAccess.Write, FileShare.Read))
using (var fs2 = new FileStream("myfile", FileMode.Open, FileAccess.Read, FileShare.Read)) {
}
因此打开第一个文件进行写入,FileShare = Read。然后再次尝试打开文件以进行读取,再次使用 FileShare = Read。这是行不通的,因为如果文件已经被打开写入,任何 FileShare = read 的请求都会失败。要完成这项工作,您必须这样做:
using (var fs1 = new FileStream("myfile", FileMode.Append, FileAccess.Write, FileShare.Read))
using (var fs2 = new FileStream("myfile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
}
在这里,您请求 FileShare.ReadWrite,它允许您读取 fs1 打开的文件进行写入。
现在,如果同时写入和读取同一个文件是一个好主意,这完全取决于您想要实现的目标以及您是否知道自己在做什么。在大多数情况下,这不是一个好主意,但这又取决于。
更新 2. 完全可以使用上面的代码来实现您的目标(打开 .docx 进行阅读,而 MS Word 将其打开以进行写作:
using (var file = new FileStream(@"my.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
var myPackage = Package.Open(file);
// here do what you want with your .docx
}