2012-04-21 12 views
0

現在、私はコンテンツをファイルに書き込む必要があるC#プロジェクトに取り組んでいます。ファイルが書き込まれている間、別のスレッドがファイルにアクセスしてファイルサイズを取得するので、ファイルに書き込んでいるときに、ファイルサイズのチェックでファイルがロックされてロックアウトされることがあります。ロックアウトを避けるためにファイルに書き込む前にバッファに書き込む

何か考えていたのは何らかのバッファを作成することでしたが、私がgoogleするたびに、すべてのローカルとしては適していないネットワークストリームが戻ってきました。スレッドがファイルに直接書き込む代わりに、何らかの種類のバッファに書き込みを行い、ファイルが書き込み可能かどうかをチェックしてバッファを読み取り、その内容をファイルに書き込みます。

もう1つの問題は、ファイルに書き込むときにプログラムが複数の場所から入力を受け取っているので、正しいファイルに書き込むようにパラメータを追加する必要があるため、この値をバッファのどこかに保存する必要がある私がストリームの見たものから、あなたは文字列を書くことしかできません。

基本的な質問は、バッファに書き込んだ後にバッファから読み込んで、ファイルに書き込んでバッファ内にパラメータを保持できるようにすることです。ファイルに書き込むときに、どのファイルに書き込む。

ご協力いただきありがとうございます。

+2

おそらく、バッファの代わりに[ロック](http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx)が必要です。 –

+0

そして、1つのバッファを持つ代わりに、出力ファイルごとに1つのバッファを用意してください。 –

答えて

0

バッファ空間とファイル仕様を持つクラスを宣言します。書き込みごとに1つ作成し、それをBackgroundWorker書き込みスレッドにキューイングします。スレッドはバッファインスタンスをデキューし、適切なsleep()ループetryでファイルを書き込み、一時ファイルロックが確実に処理されるようにします。

キューに対してBlockingCollectionを使用できます。

0

ファイルの長さを取得するとファイルがロックされません。どのようにその操作をしていますか?

バッファを使用すると、長さチェック操作で正しい値が表示されなくなります。

関連する問題