| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

C Sharp サンプルコード

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

C# サンプルコード

C Sharp | 言語まとめ C Sharp |

ファイル

ファイル名を抽出

  1. var filename = Path.GetFileName(file);

ファイルを書く

  1. using (var writer = new StreamWriter(Path.Combine(outPath, "Hoge.csv")))
  2. {
  3. writer.WriteLine("Something to write.");
  4. }

エンコーディングを指定してファイルを読む

  1. using System;
  2. using System.IO;
  3. namespace ConsoleApplication1
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. string path = @"c:\work\test.csv";
  10. using (var reader = new StreamReader(path, System.Text.Encoding.GetEncoding("shift_jis")))
  11. {
  12. string line = null;
  13. while ((line = reader.ReadLine()) != null)
  14. {
  15. Console.WriteLine(line);
  16. }
  17. }
  18. }
  19. }
  20. }
  • 以下のようなエラーが出る場合
  1. System.ArgumentException: ''Shift_JIS' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. '

Cshart shift jis.png

  1. using System.Text;
  2. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

CSVファイルを解析(TextFieldParser)

  • http://msdn.microsoft.com/ja-jp/library/x710fk43.aspx
  • 便利だが、どんな挙動をするのかよくわからない(どこにドキュメントがあるの?)
    • 二重引用符で囲まれたフィールドでは、カンマはセパレータとしてではなく、値として判定してくれる(Excel仕様?)
    • なぜVisualBasic名前空間にある?
  1. using System;
  2. using Microsoft.VisualBasic.FileIO;
  3.  
  4. namespace ConsoleApplication1
  5. {
  6. class Program
  7. {
  8. static void Main(string[] args)
  9. {
  10. string path = @"c:\work\test.csv";
  11. using (TextFieldParser parser = new TextFieldParser(path,System.Text.Encoding.GetEncoding("shift_jis")))
  12. {
  13. parser.TextFieldType = FieldType.Delimited;
  14. parser.SetDelimiters(",");
  15. try
  16. {
  17. while (!parser.EndOfData)
  18. {
  19. string[] fields = parser.ReadFields();
  20. foreach (string field in fields)
  21. {
  22. Console.Write("[{0}]", field);
  23. }
  24. Console.WriteLine();
  25. }
  26. }
  27. catch (MalformedLineException e)
  28. {
  29. Console.WriteLine(e);
  30. System.Environment.Exit(1);
  31. }
  32. }
  33. }
  34. }
  35. }

UTF-8 エンコード BOMありなし

  • UTF-8をGetEncodeすると、BOMが付く。new System.Text.UTF8Encoding(false) でBOMなし
  1. Encoding enc = null;
  2. if(String.Equals(toEnc,"utf-8", StringComparison.OrdinalIgnoreCase)) {
  3. // BOMなし
  4. enc = new System.Text.UTF8Encoding(false);
  5. }
  6. else
  7. {
  8. enc = Encoding.GetEncoding(toEnc);
  9. }

ファイルエンコード一括変換

  1. public class FileEncodingConverter
  2. {
  3. public FileEncodingConverter() {
  4. System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
  5. }
  6.  
  7. /// <summary>
  8. /// 指定されたディレクトリのすべてのファイルのエンコードを変換して別のディレクトリに書き出す
  9. /// </summary>
  10. /// <param name="srcDir">変換元ディレクトリ</param>
  11. /// <param name="dstDir">変換先ディレクトリ</param>
  12. /// <param name="fromEnc">変換元エンコーディング</param>
  13. /// <param name="toEnc">変換後エンコーディング</param>
  14. public void convertDir(string srcDir, string dstDir, string fromEnc, string toEnc)
  15. {
  16. if (!Directory.Exists(dstDir))
  17. {
  18. Directory.CreateDirectory(dstDir);
  19. }
  20.  
  21. var files = Directory.GetFiles(srcDir);
  22. foreach(var file in files)
  23. {
  24. var filename = Path.GetFileName(file);
  25. convert(file, Path.Combine(dstDir, filename), fromEnc, toEnc);
  26. }
  27. }
  28.  
  29. /// <summary>
  30. /// 指定されたファイルのエンコードを変換して別ファイルに書き出す
  31. /// </summary>
  32. /// <param name="srcFile">変換元ファイル</param>
  33. /// <param name="dstFile">変換後ファイル</param>
  34. /// <param name="fromEnc">変換元エンコーディング</param>
  35. /// <param name="toEnc">変換後エンコーディング</param>
  36. public void convert(string srcFile, string dstFile, string fromEnc, string toEnc)
  37. {
  38. using(var writer = new StreamWriter(File.OpenWrite(dstFile),Encoding.GetEncoding(toEnc)))
  39. {
  40. foreach(var line in File.ReadLines(srcFile, System.Text.Encoding.GetEncoding(fromEnc)))
  41. {
  42. writer.WriteLine(line);
  43. }
  44. }
  45. }
  46. }

設定

C# 設定情報を保存する

LINQ

C# LINQ使用例

非同期処理

C# 非同期処理からUIスレッドにアクセスし画面を更新する

C# asyncとawaitの動作確認

WPF