2017-09-13 74 views
1

我有一個進程有2個FileStream對象在同一個文件上運行。 這兩個對象打開使用相同的方法將文件:多個文件流在同一個文件導致寫入被忽略

file = new FileStream(fullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);

然後我寫一些字節他們兩個使用write方法,而另一個被忽略,只有最後一個叫寫承諾。寫使用下面的代碼被稱爲:

fh.file.Write(buffer, 0, count);

buf等於在兩個呼叫"fd"count等於2

我打電話close()對於後兩個對象。程序結束後,輸出文件只有兩個應該寫入的「fd」中的一個。爲什麼會發生?我試圖在兩個對象上調用Flush(),但它沒有什麼區別。

注意:致電Write()由同一個線程完成。 最終的執行順序是這樣的:

open_obj1() 
open_obj2() 
write_obj1("fd") 
write_obj2("fd") 
close_obj1() 
close_obj2() 

這似乎是一個簡單的問題,但我不能得到問題的所在。兩個FileStreams是否在相同的地方讀取文件指針,然後嘗試寫入相同的地方,因爲它們都尋找到文件的結尾?如果是的話,如果我想要完全相同的執行順序,這有什麼解決方案?

+0

爲什麼在同一個文件上需要兩個文件流? – Michael

+0

'兩個FileStreams是否在同一個地方讀取文件指針,然後嘗試寫入相同的地方,因爲它們都尋找文件的末尾?'是 –

+0

@Michael這是一種我需要通過的測試用例。 – mohRamadan

回答

1

參見Stream.Position;因爲這個屬性並不是在你的兩個流之間共享的,所以後面的寫入從開始就開始,因此寫入了以前的寫入,與將文本輸入切換爲覆蓋,移動插入符號以及鍵入新文本無異。同樣,如果你要寫一個較長的字符串,然後再寫一個較短的字符串,你會觀察到較長字符串的剩餘文本。