c# - 只能在只写模式下请求附加访问
问题描述
我需要能够从一个也可以写入的文件中读取,此外,我需要为 Append 打开可写文件,因为它可能非常大,我只需要添加即可。所以我有这个代码:
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.Append
,我使用FileMode.OpenOrCreate
,我不会出错,但文件的内容会丢失。
我怎样才能完成追加,但也能够像这样打开文件进行共享?
解决方案
我怎样才能完成追加,但也能够像这样打开文件进行共享?
不要将“访问”与“共享”混淆。FileAccess
枚举描述了您的进程希望如何使用该文件。FileShare
枚举描述了文件的其他句柄(包括您自己进程中的句柄)可以对文件执行的操作。
在您的情况下,您需要更改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
按原样保留这些值,但一个文件的作者实际上不应超过一位,而且从您的问题的措辞方式来看,这似乎不是您想要的。因此,在上面,我已将编写器更改为仅共享为FileShare.Read
,而阅读器仅使用 来打开文件FileAccess.Read
,此外还修复FileAccess.ReadWrite
了异常消息表明需要编写器的错误。
推荐阅读
- python-3.x - Python 3 虚拟环境正在执行 python 2
- r - 优化调用以进行变异和汇总?
- vagrant - Vagrant - vagrant 无法转发此 VM 上的指定端口
- image - 如何制作隐写图像
- r - 如何将我的价格 df 转换为基于 100 的回报 df
- scala - Select a literal based on a column value in Spark
- google-apps-script - 使用宏从新工作表中创建和提取信息
- google-cloud-platform - 将反应应用程序部署到 gcp 后尝试调试“502 Bad Gateway”错误?
- xcode - SwiftUI: how to create custom UIDatePicker
- java - Stream binary data (created using FlatBuffers) from Node backend and receive in Android frontend