我有一個文件,其中包含我想監(jiān)視的更改以及自己添加的更改的數(shù)據(jù)。像“ Tail -f foo.txt”那樣思考?;诖司€程,看來我應(yīng)該只創(chuàng)建一個文件流,并將其同時傳遞給編寫者和閱讀者。但是,當(dāng)閱讀器到達(dá)原始文件的末尾時,看不到我自己編寫的更新。我知道這似乎是一種奇怪的情況,更多的是實(shí)驗(yàn),看能否完成。這是我嘗試的示例案例: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貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個贊
當(dāng)您寫入流時,文件指針將更改并移動到流的末尾。您沒有指望的是StreamReader有自己的緩沖區(qū)。它從文件中讀取1024個字節(jié),然后您將從該緩沖區(qū)中獲取結(jié)果。直到緩沖區(qū)用完,所以它必須再次從FileStream中讀取。由于文件指針位于文件末尾,因此一無所獲。
您確實(shí)確實(shí)需要單獨(dú)的FileStreams,每個FileStreams都有自己的文件指針,以使這項(xiàng)工作有希望。

慕尼黑5688855
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個贊
對于涉及使用同一流進(jìn)行讀寫的此問題的任何解決方案,您都不大可能滿意。如果您嘗試使用讀取文件尾部,則尤其如此StreamReader。
您想要兩個不同的文件流。StreamWriter如果愿意,寫作流可以是a 。讀取流應(yīng)為二進(jìn)制流(即使用File.OpenRead或創(chuàng)建FileStream.Create),從文件中讀取原始字節(jié),然后轉(zhuǎn)換為文本。我對這個問題的回答顯示了如何進(jìn)行的基礎(chǔ)知識。
- 3 回答
- 0 關(guān)注
- 766 瀏覽
添加回答
舉報
0/150
提交
取消