文件共享.读写系统,io,包装
本文关键字:io 包装 系统 读写 文件共享 | 更新日期: 2023-09-27 18:12:09
我正在使用System.IO.Packaging来处理Package文件。
但似乎包不能打开一个文件与读访问提供filesshare . readwrite。下面是代码:
myPackage = Package.Open("fileName", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
当我尝试加载文件时,抛出以下异常:
抛出异常:'System. 'WindowsBase.dll中的NotSupportedException
附加信息:Only FileShare。读取和文件共享。
有什么可以让它工作吗?我需要将FileShare设置为读写
编辑:我正试图在我的代码与docx文件的工作。我只是想能够读取文件的内容,而不修改它。同时,我也希望它可以用Word编辑。这就是我想要达到的目标。为此目的,我已经成功地使用了DotNetZip的Ionic.Zip库。但是我在保存文件时遇到了一些错误。所以我不得不回到系统,io,包装。任何帮助都会很感激。
不清楚为什么要这样做,但您可以尝试直接在文件流上指定选项,如下所示:
using (var file = new FileStream(@"myfile", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
var myPackage = Package.Open(file);
}
UPDATE详细说明何时这可能有用。假设您尝试这样做:
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)) {
}
请求文件共享。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
}