web-dev-qa-db-ja.com

FileStream vs / differences StreamWriter?

質問:

ドットネットのFileStreamとStreamWriterの違いは何ですか?

どのコンテキストを使用することになっていますか?彼らの長所と短所は何ですか?

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

80
What'sUP

ドットネットのFileStreamとStreamWriterの違いは何ですか?

FileStreamStreamです。すべてのストリームと同様に、_byte[]_データのみを処理します。

_StreamWriter : TextWriter_は、ストリームデコレータです。 TextWriterは、文字列や文字などのテキストデータを_byte[]_にエンコードし、リンクされたStreamに書き込みます。

どのコンテキストを使用することになっていますか?彼らの長所と短所は何ですか?

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

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

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

93
Henk Holterman

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

19
Hans Passant

FileStreamは、作業ファイルを明示的に対象としています。

StreamWriterを使用して、あらゆる種類の Stream -ネットワークソケット、ファイルなどにストリーミングできます。

ScottGuはここでさまざまなStreamオブジェクトを非常にうまく説明しています。 http://www.codeguru.com/Csharp/Csharp/cs_data/streaming/article.php/c422

14
David

さて、MSDNから FileStream

ファイルの周りにストリームを公開し、同期および非同期の読み取りおよび書き込み操作をサポートします。

および StreamWriter のMSDN:

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

最も明らかな違いは、FileStreamは読み取り/書き込み操作を許可するのに対し、StreamWriterは書き込み専用であるということです。

StreamWriterページはさらに追加します:

StreamWriterは特定のエンコーディングでの文字出力用に設計されていますが、Streamから派生したクラスはバイト入出力用に設計されています。

2番目の違いは、FileStreamはバイト用であり、StreamWriterはテキスト用です。

7
ChrisF

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

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

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

5
KeithS

(上記のコメントに加えて)1つの重要な違いは、FileStreamが、指定されたFileStream.Positionへのランダムディスクアクセスの読み取りと書き込みをサポートすることです。大規模なファイル変更の場合、それは非常に貴重です。

0
beanmf