【发布时间】:2014-05-02 14:43:44
【问题描述】:
假设我有一个进程X,下面的代码打开了一些file,当前也被另一个进程Y使用。进程 Y 正在大量向file 写入新行。
using (var file = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var reader = new StreamReader(file))
{
string line = null;
while ((line = reader.ReadLine()) != null)
{
// do something with line
}
}
我想知道来自X 的读取如何影响来自Y 的写入?在进程X 中打开文件(在使用范围内)时会被阻止写入吗?更准确地说,这是关于 Windows 上的 .NET 4.5。
【问题讨论】:
-
X 还能打开文件吗?
-
@Brandon,多亏了
File.Open提供的标志,如果Y以正确的方式打开它。但这行得通。 -
我想您会发现这取决于您是否在流式传输以及何时刷新缓冲区。
-
您已经编写了代码......有什么东西阻止您测试这个吗?你试过了吗,你有问题吗?有什么问题?
-
请记住,如果读取器 X 读取的数据超出了写入器 Y 实际写入(刷新)到共享的最后一个数据,它将获得 EOF 条件文件。这意味着您可能需要休眠并重试读取,或者使用其他机制来同步读取和写入操作。