LoginSignup
2
1

More than 5 years have passed since last update.

ファイルやメモリ内容の読み書き (Stream, Reader, Writer)

Last updated at Posted at 2019-04-12

概念

ファイルなどからの入出力を「ストリーム」と呼び、「リーダー」で読み込み、「ライター」で書き込む。

  • Stream : 入出力
  • Reader : ストリームの読み込み
  • Writer : ストリームの書き込み

Stream

ファイルの場合は FileStream、メモリの場合は MemoryStream を使う。

Stream
 ┣ BufferedStream
 ┣ FileStream
 ┗ MemoryStream

Reader

ファイルの場合は StreamReader、文字列の場合は StringReader を使う。

TextReader
 ┣ StreamReader
 ┗ StringReader
BinaryReader
XmlReader

Writer

ファイルの場合は StreamWriter、文字列の場合は StringWriter を使う。

TextWriter
 ┣ StreamWriter
 ┗ StringWriter
BinaryWriter
XmlWriter

使用例

CSV 形式のテキストを解析

CSV 形式とは、

  • 各フィールドをカンマで区切る
  • 各フィールドを二重引用符で囲む (囲まなくても良いが、カンマが含まれる場合は必須)
  • 二重引用符の場合は2つ続ける
using Microsoft.VisualBasic.FileIO; // Microsoft.VisualBasic.dll

var text = "abc,\"d\"\"ef\",\"gh,i\",jk";

using (var reader = new StringReader(text))
using (var parser = new TextFieldParser(reader) { TextFieldType = FieldType.Delimited, Delimiters = new[] { "," } })
{
    var fields = parser.ReadFields(); // ⇒ string[] { "abc", "d\"ef", "gh,i", "jk" }
}

XML をメモリ上で XSL 変換してファイルに出力

XSLT とは、XML を異なる XML 形式などに変換するもので、ここでの説明は割愛

// カスタムクラスとそのインスタンスを用意
class Class1
{
    public string Dummy { get; set; }
}
var obj = new Class1();

// XSL ファイルを読み込む
var xslt = new XslCompiledTransform();
xslt.Load("test.xsl", new XsltSettings(true, true), null);

using (var memory = new MemoryStream())
{
    // カスタムクラスの内容を XML としてメモリに書き込む
    using (var writer = XmlWriter.Create(memory, new XmlWriterSettings() { Encoding = Encoding.UTF8, Indent = true }))
    {
        var serializer = new XmlSerializer(obj.GetType());
        serializer.Serialize(writer, obj, new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty }));
    }
    // メモリ内の XML を XSL 変換してファイルに出力
    using (var stream = new FileStream("sample.xml", FileMode.Create))
    {
        memory.Position = 0;
        xsl.Transform(memory, stream, Encoding.UTF8);
    }
}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1