覚えてられない内容。少しずつまとめる。
Encoding
・メソッド
System.Text.Encoding.GetEncoding(“utf-8”)
・静的プロパティ
System.Text.Encoding.UTF8
・コンストラクタ
new System.Text.UTF8Encoding(false)
ASCIIとUnicodeは、Encodingクラスから派生した専用クラスがあり、falseにするとBOM無しにすることができる。
Byte
・String -> Byte[]
byte[] bytes = Encoding.UTF8.GetBytes(string);
・Byte[] -> String
string text = System.Text.Encoding.UTF8.GetString(bytes);
・Byte[] -> StreamReader -> String
var r = new System.IO.StreamReader(bytes, Encoding.UTF8);
r.ReadToEnd();
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
InitializeComponent(); string source = "あいうえお"; //文字列 -> バイト配列 byte[] bytes = Encoding.UTF8.GetBytes(source); //バイト配列 -> 文字列 string str = Encoding.UTF8.GetString(bytes); System.Diagnostics.Debug.Print(str); //あいうえお //バイト配列 -> バイト文字列 string byteString1 = BitConverter.ToString(bytes); System.Diagnostics.Debug.Print(byteString1); //E3-81-82-E3-81-84-E3-81-86-E3-81-88-E3-81-8A //バイト文字列(ハイフン除く) string byteString2 = BitConverter.ToString(bytes).Replace("-",""); System.Diagnostics.Debug.Print(byteString2); //E38182E38184E38186E38188E3818A //バイト文字列 -> バイト配列 -> 文字列 List<byte> b = new List<byte>(); for (int i = 0; i < byteString2.Length; i += 2) { b.Add(byte.Parse(byteString2.Substring(i, 2), System.Globalization.NumberStyles.AllowHexSpecifier)); } byte[] bb = b.ToArray(); string str2 = Encoding.UTF8.GetString(bb); System.Diagnostics.Debug.Print(str2); //あいうえお |
Stream/Reader/Writer
TextReader系
エンコード指定し、文字の入出力が基本。
TextReader系は、ReadToEndやReadLineが使える。
順次アクセスseekが使えない。
System.IO.StreamReader
System.IO.StreamWriter
System.IO.StringReader
System.IO.StringWriter
Stream系
バイトの入出力が基本。
基本seekできる。
System.IO.FileStream
System.IO.MemoryStream
System.IO.BufferedStream
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
byte[] byteString = Encoding.UTF8.GetBytes("Hello World !!!"); var ms = new System.IO.MemoryStream(); ms.Write(byteString,0,byteString.Length); // MemoryStreamに書き込み var buf1 = ms.ToArray(); // MemoryStreamをバイト配列へ MessageBox.Show(Encoding.UTF8.GetString(buf1)); ms.Position = 0; byte[] buf2 = new byte[byteString.Length]; // Length = 15 ms.Read(buf2,0,byteString.Length); // MemoryStreamをバイト配列へ MessageBox.Show(Encoding.UTF8.GetString(buf2)); |
TextReaderとStream
ファイルから文字を読むとき、FileStreamとStreamReaderがある。FileStreamはランダムアクセスでseekが使える。
Streamの型を受け付けるところではTextReaderは使えない。
・例(XmlSerializer -> MemoryStream -> Byte[] -> String)
1 2 3 4 5 6 7 8 9 |
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(HogeClass)); using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { x.Serialize(ms, HogeClassInstance); string str= Encoding.UTF8.GetString(ms.ToArray()); // ms.ToArray()でMemoryStreamからByte[]を読む。Postion=0の必要なし。 MessageBox.Show(str); } |
ファイル/フォルダ
・フォルダ一覧
Directory.GetDirectories
Directory.EnumerateDirectories
・ファイル一覧
Directory.GetFiles
Directory.EnumerateFiles
・ファイル名
Path.GetFileName
Path.GetFileNameWithoutExtension
・ディレクトリ名
Path.GetDirectoryName
・ファイルの読み書き(Reader/Writerのラップ)
File.WriteAllLines
File.ReadAllLines
File.WriteAllText
File.ReadAllText
・存在確認
File.Exists
Directory.Exists