同时读 - 写在C#中的文件 [英] simultaneous read-write a file in C#
问题描述
我有一个包含文件,我想监视变化,以及添加自己的变化的数据。认为像尾巴-f foo.txt的。
I have a file containing data that I'd like to monitor changes to, as well as add changes of my own. Think like "Tail -f foo.txt".
根据这个线程,它看起来像我应该只创建一个文件流,它都传递给作者和读者。然而,当读取器到达原始文件的末尾时,它未能看到我写自己的更新。
Based on this thread, it looks like I should just create a filestream, and pass it both to a writer and reader. However, when the reader reaches the end of the original file, it fails to see updates I write myself.
我知道这似乎是一个奇怪的情况...查看其更多的实验,如果是可以做到的。
I know it seems like a weird situation... its more an experiment to see if it can be done.
下面是我试过的例子情况:
Here is the example case I tried:
foo.txt的:结果
一个结果
b结果
ç结果
ð结果
Ë结果
˚F结果
foo.txt:
a
b
c
d
e
f
string test = "foo.txt";
System.IO.FileStream fs = new System.IO.FileStream(test, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);
var sw = new System.IO.StreamWriter(fs);
var sr = new System.IO.StreamReader(fs);
var res = sr.ReadLine();
res = sr.ReadLine();
sw.WriteLine("g");
sw.Flush();
res = sr.ReadLine();
res = sr.ReadLine();
sw.WriteLine("h");
sw.Flush();
sw.WriteLine("i");
sw.Flush();
sw.WriteLine("j");
sw.Flush();
sw.WriteLine("k");
sw.Flush();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
让过去的F后,读者将返回null。
After getting past "f", the reader returns null.
推荐答案
好吧,两名编辑后...
Ok, two edits later...
这应该工作。我第一次尝试它,我想我已经忘记设置FileMode.Append对ostream的。
This should work. The first time I tried it I think I had forgotten to set FileMode.Append on the oStream.
string test = "foo.txt";
var oStream = new FileStream(test, FileMode.Append, FileAccess.Write, FileShare.Read);
var iStream = new FileStream(test, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
var sw = new System.IO.StreamWriter(oStream);
var sr = new System.IO.StreamReader(iStream);
var res = sr.ReadLine();
res = sr.ReadLine();
sw.WriteLine("g");
sw.Flush();
res = sr.ReadLine();
res = sr.ReadLine();
sw.WriteLine("h"); sw.Flush();
sw.WriteLine("i"); sw.Flush();
sw.WriteLine("j"); sw.Flush();
sw.WriteLine("k"); sw.Flush();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
res = sr.ReadLine();
这篇关于同时读 - 写在C#中的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!