2017-09-13 26 views
1

同じファイルで動作する2つのFileStreamオブジェクトを持つプロセスがあります。 両方のオブジェクトが同じ方法で使用してファイルを開きます。同じファイル上に複数のFileStreamがあると、書き込みは無視されます

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

をそれから私は、書き込みメソッドを使用してそれらの両方にいくつかのバイトを書き込み、他のは無視されている間、唯一の最後と呼ばれる書き込みがコミットされます。書き込みは、次のコードを使用して呼び出される:私はその後、両方のオブジェクトのclose()を呼び出す

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

bufは、両方の呼び出しで"fd"に等しく、count2

に等しいです。プログラムが終了した後、出力ファイルは書かれたはずの2つの "fd"のうちの1つだけを持ちます。なぜそれが起こっているのですか?両方のオブジェクトでFlush()を呼び出してみましたが、違いはありません。

注:Write()への呼び出しは、同じスレッドによって行われます。 最終実行順序は次のようである:

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

それは、単純な問題のように思えるが、問題がどこにあるか、私は得ることができません。両方のFileStreamはファイルポインタを同じ場所で読み取り、両方がファイルの最後を探しているため同じ場所に書き込もうとしますか?もしそうなら、私はまったく同じ実行命令を望んでいたなら、これに対する解決策は何ですか?

+0

なぜ同じファイルに2つのファイルストリームが必要ですか? – Michael

+0

'両方のFileStreamが同じ場所のファイルポインタを読み込んで、両方がファイルの終わりまでシークするので、同じ場所に書き込もうとしますか? 'はい –

+0

@Michaelそれは私が渡す必要のあるテストケースです。 – mohRamadan

答えて

1

Stream.Positionを参照。このプロパティは2つのストリーム間で共有されないため、後続の書き込みが最初から開始されるため、上書きするテキスト入力を切り替えたり、キャレットを移動したり、新しいテキストを入力したりするのとは異なります。同様に、長い文字列の後ろに短い文字列を書く場合は、長い文字列の残りのテキストを観察します。

関連する問題