2017-09-13 71 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;因为这个属性并不是在你的两个流之间共享的,所以后面的写入从开始就开始,因此写入了以前的写入,与将文本输入切换为覆盖,移动插入符号以及键入新文本无异。同样,如果你要写一个较长的字符串,然后再写一个较短的字符串,你会观察到较长字符串的剩余文本。