2011-02-10 15 views
65

質問:FileStream対/相違StreamWriter?

dotnetのFileStreamとStreamWriterの違いは何ですか?

どのようなコンテキストを使用する必要がありますか?彼らの長所と短所は何ですか?

これら2つを組み合わせて1つにすることはできますか?

答えて

79

dotnetのFileStreamとStreamWriterの違いは何ですか?

FileStreamは、Streamである。すべてのストリーム同様、byte[]データのみを扱います。

StreamWriter : TextWriterは、ストリームデコレータです。 TextWriterは、文字列または文字のようなテキストデータをbyte[]にエンコードし、それをリンクされたStreamに書き込みます。

どのようなコンテキストを使用する予定ですか?彼らの長所と短所は何ですか?

byte[]のデータがある場合は、裸のFileStreamを使用します。テキストを書きたい場合は、StreamWriterを追加します。より複雑なデータを書き込むには、フォーマッタまたはシリアライザを使用します。

これら2つを1つに結合することはできますか?

はい。 StreamWriterを作成するには、常にStreamが必要です。ヘルパーメソッドSystem.IO.File.CreateText("path")はそれらを組み合わせて作成し、外側のライターのみをDispose()する必要があります。

+1

また、 'FileStream'はストリームのタイプであり、特にファイルに対して調整されていることに注意することが重要です。ストリームはネイティブにバイトで動作しますが、 'StreamWriter'/Readerは' FileStream'だけでなく、任意のストリームにテキストを書き込み/読み込みます。たとえば、 'MemoryStreams'、' NetworkStreams'などです。 – iliketocode

18

FileStreamはバイトを書き込み、StreamWriterはテキストを書き込みます。それで全部です。

+11

実際、それは「すべて」ではありません...しかし、それは1つの正しい違いです。 – David

14

FileStreamは、明示的に作業ファイルを対象としています。 http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c4223

+1

ストリームの優れた参照ですが、ランダムアクセスR/Wストリームは対象となりません。特に、シリアライズ/デシリアライズ情報と非ファイルストリームのデモンストレーションは非常に便利です。 +1 – ThunderGr

7

まあ、MSDNからFileStream用:など

ScottGuは非常にうまく、ここでは異なるストリームオブジェクトを説明し、ネットワークソケット、ファイル -

Aは、StreamWriterのはStreamのいずれかのタイプにストリーミングするために使用することができます:

同期と非同期の両方の読み取りと書き込み操作をサポートするストリームをファイルに公開します。

StreamWriterため

とMSDN:

は、特定のエンコーディングでストリームに文字を書くためたTextWriterを実装します。

最も顕著な違いは、FileStreamは読み取り/書き込み操作が許可され、StreamWriterは書き込み専用です。

StreamWriterページには、追加するために行く:ストリームから派生したクラスは、バイト入力と出力のために設計されているのに対し、

のStreamWriterは、特定のエンコーディングの文字出力用に設計されています。

もう1つの違いは、FileStreamがバイト用であり、StreamWriterがテキスト用です。

5

既知のデータソースに情報を出力する際に​​使用される2つの異なるレベルです。

FileStreamは、ストリームの一種で、概念的にはある場所を指し示し、その場所との間で着信および/または発信するデータを処理できるメカニズムです。ストリームは、ファイル、ネットワーク接続、メモリー、パイプ、コンソール、デバッグおよびトレース・リスナー、およびその他のいくつかのタイプのデータ・ソースに対する読み取り/書き込み用に存在します。具体的には、ファイルシステムへの読み書きを実行するFileStreamが存在します。ほとんどのストリームはかなり低いレベルで使用され、データをバイトとして処理します。

StreamWriterは、ストリームを使用してプレーンテキストを出力することを簡素化するStreamのラッパーです。バイトの代わりに文字列を取るメソッドを公開し、バイト配列との間で必要な変換を実行します。他の作家がいます。他の主なものはXmlTextWriterで、これはXML形式のデータの書き出しを容易にします。また、同様にストリームをラップし、データを戻すことを容易にするWriterに対するReaderの対応があります。

0

重要な違い(上記のコメントに加えて)は、FileStreamが任意の指定されたFileStream.Positionへのランダムな書き込みと書き込みをサポートしている可能性があります。大きなファイル変更の場合、それは非常に重要です。