为了账号安全,请及时绑定邮箱和手机立即绑定

在C#中同时读写文件

在C#中同时读写文件

C#
BIG阳 2019-12-05 15:11:11
我有一个文件,其中包含我想监视的更改以及自己添加的更改的数据。像“ Tail -f foo.txt”那样思考。基于此线程,看来我应该只创建一个文件流,并将其同时传递给编写者和阅读者。但是,当阅读器到达原始文件的末尾时,看不到我自己编写的更新。我知道这似乎是一种奇怪的情况,更多的是实验,看能否完成。这是我尝试的示例案例:foo.txt:abcdef        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。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

当您写入流时,文件指针将更改并移动到流的末尾。您没有指望的是StreamReader有自己的缓冲区。它从文件中读取1024个字节,然后您将从该缓冲区中获取结果。直到缓冲区用完,所以它必须再次从FileStream中读取。由于文件指针位于文件末尾,因此一无所获。

您确实确实需要单独的FileStreams,每个FileStreams都有自己的文件指针,以使这项工作有希望。


查看完整回答
反对 回复 2019-12-05
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

对于涉及使用同一流进行读写的此问题的任何解决方案,您都不大可能满意。如果您尝试使用读取文件尾部,则尤其如此StreamReader。


您想要两个不同的文件流。StreamWriter如果愿意,写作流可以是a 。读取流应为二进制流(即使用File.OpenRead或创建FileStream.Create),从文件中读取原始字节,然后转换为文本。我对这个问题的回答显示了如何进行的基础知识。


查看完整回答
反对 回复 2019-12-05
  • 3 回答
  • 0 关注
  • 659 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信