!!!C# サンプルコード [C#][言語まとめ C#] {{amazon 4873116503}} *C# Document http://msdn.microsoft.com/ja-jp/library/kx37x362.aspx *.Net Class Library Reference http://msdn.microsoft.com/ja-jp/library/ms229335.aspx !!ファイル !ファイル名を抽出 var filename = Path.GetFileName(file); !ファイルを書く using (var writer = new StreamWriter(Path.Combine(outPath, "Hoge.csv"))) { writer.WriteLine("Something to write."); } !エンコーディングを指定してファイルを読む using System; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string path = @"c:\work\test.csv"; using (var reader = new StreamReader(path, System.Text.Encoding.GetEncoding("shift_jis"))) { string line = null; while ((line = reader.ReadLine()) != null) { Console.WriteLine(line); } } } } } !CSVファイルを解析(TextFieldParser) *http://msdn.microsoft.com/ja-jp/library/x710fk43.aspx *便利だが、どんな挙動をするのかよくわからない(どこにドキュメントがあるの?) **二重引用符で囲まれたフィールドでは、カンマはセパレータとしてではなく、値として判定してくれる(Excel仕様?) **なぜVisualBasic名前空間にある? using System; using Microsoft.VisualBasic.FileIO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string path = @"c:\work\test.csv"; using (TextFieldParser parser = new TextFieldParser(path,System.Text.Encoding.GetEncoding("shift_jis"))) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(","); try { while (!parser.EndOfData) { string[] fields = parser.ReadFields(); foreach (string field in fields) { Console.Write("[{0}]", field); } Console.WriteLine(); } } catch (MalformedLineException e) { Console.WriteLine(e); System.Environment.Exit(1); } } } } } !UTF-8 エンコード BOMありなし *UTF-8をGetEncodeすると、BOMが付く。new System.Text.UTF8Encoding(false) でBOMなし Encoding enc = null; if(String.Equals(toEnc,"utf-8", StringComparison.OrdinalIgnoreCase)) { // BOMなし enc = new System.Text.UTF8Encoding(false); } else { enc = Encoding.GetEncoding(toEnc); } !ファイルエンコード一括変換 public class FileEncodingConverter { public FileEncodingConverter() { System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); } /// /// 指定されたディレクトリのすべてのファイルのエンコードを変換して別のディレクトリに書き出す /// /// 変換元ディレクトリ /// 変換先ディレクトリ /// 変換元エンコーディング /// 変換後エンコーディング public void convertDir(string srcDir, string dstDir, string fromEnc, string toEnc) { if (!Directory.Exists(dstDir)) { Directory.CreateDirectory(dstDir); } var files = Directory.GetFiles(srcDir); foreach(var file in files) { var filename = Path.GetFileName(file); convert(file, Path.Combine(dstDir, filename), fromEnc, toEnc); } } /// /// 指定されたファイルのエンコードを変換して別ファイルに書き出す /// /// 変換元ファイル /// 変換後ファイル /// 変換元エンコーディング /// 変換後エンコーディング public void convert(string srcFile, string dstFile, string fromEnc, string toEnc) { using(var writer = new StreamWriter(File.OpenWrite(dstFile),Encoding.GetEncoding(toEnc))) { foreach(var line in File.ReadLines(srcFile, System.Text.Encoding.GetEncoding(fromEnc))) { writer.WriteLine(line); } } } } !!設定 !C# 設定情報を保存する *C# 設定情報を保存する !!LINQ !C# LINQ使用例 *C# LINQ使用例 !!非同期処理 !C# 非同期処理からUIスレッドにアクセスし画面を更新する *C# 非同期処理からUIスレッドにアクセスし画面を更新する !C# asyncとawaitの動作確認 *C# asyncとawaitの動作確認 !!WPF *http://typea.info/blg/glob/wpf/ !!HttpClient !同期通信 public void GetLoginToken() { var param = new Dictionary() { { "action", "query" }, {"meta","tokens" }, {"type","login" }, {"format","json" }, }; var response = client.GetAsync($"{API_URL}?{new FormUrlEncodedContent(param).ReadAsStringAsync().Result}").Result; if (response.StatusCode == System.Net.HttpStatusCode.OK) { Console.WriteLine("RES:" + response.ToString()); } }