ファイルやメモリ内容の読み書き (Stream, Reader, Writer)
概念
ファイルなどからの入出力を「ストリーム」と呼び、「リーダー」で読み込み、「ライター」で書き込む。
- 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);
}
}
Author And Source
この問題について(ファイルやメモリ内容の読み書き (Stream, Reader, Writer)), 我々は、より多くの情報をここで見つけました https://qiita.com/Apeworks/items/858c7a83d3435a6e1211著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .