只能在只写模式下请求追加访问

Append access can be requested only in write-only mode

我需要能够从一个也可以写入的文件中读取,此外,我需要打开可写入的文件进行追加,因为它可能非常大,我只需要添加到它。所以我有这个代码:

var file = @"...";

var fsWrite = new FileStream(file, FileMode.Append, FileAccess.ReadWrite, FileShare.ReadWrite);
var writer = new SmartWaveFileWriter(fsWrite, WaveInfo.WatsonWaveFormat);

var fsRead = new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
var reader = new SmartWaveFileReader(fsRead);

reader.Dispose();
fsRead.Dispose();

writer.Dispose();
fsWrite.Dispose();

失败 System.ArgumentException: Append access can be requested only in write-only mode.

如果我使用 FileMode.OpenOrCreate 而不是 FileMode.Append,我不会收到任何错误,但文件的内容会丢失。

我怎样才能既完成追加又能像这样打开文件进行共享?

How can I accomplish append but also be able to open the file for sharing like this?

不要将“访问”与“共享”混淆。 FileAccess 枚举描述了您的 进程如何使用该文件。 FileShare 枚举描述了 other 对文件的处理(包括您自己进程中的处理)可以对文件执行的操作。

在您的情况下,您需要将 new FileStream(file, FileMode.Append, FileAccess.ReadWrite, FileShare.ReadWrite) 更改为 new FileStream(file, FileMode.Append, FileAccess.Write, FileShare.Read) 并将 new FileStream(file, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite) 更改为 new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

从技术上讲,您可以按原样保留 FileShare 值,但一个文件的编写者实际上不应该超过一位,而且从您的问题措辞来看,似乎那不是你想要的。所以在上面,除了修复不正确的 FileAccess.ReadWrite 之外,我已经将作者更改为仅以 FileShare.Read 共享,并将 reader 更改为仅使用 FileAccess.Read 打开文件] 对于作者,因为异常消息表明需要。