我需要能够从也打开用于写入的文件中读取数据,此外,我需要打开可写文件进行追加,因为它可能非常大,我只需要向其中添加内容。所以我有这个代码:
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:只能在只写模式下请求附加访问权限。
如果我使用 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 .读取、FileShare.ReadWrite)
.
从技术上讲,您可以按原样保留 FileShare
值,但实际上不应该有一个以上的文件写入者,而且从您的问题的措辞方式看来反正这不是你想要的。因此,在上面,我将编写器更改为仅以 FileShare.Read
共享,并将读取器更改为仅使用 FileAccess.Read
打开文件,此外还修复了异常消息指示需要写入器的不正确的 FileAccess.ReadWrite
。
关于c# - 仅可在只写模式下请求追加访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65924978/