トップ 差分 一覧 ping ソース 検索 ヘルプ PDF RSS ログイン

C# サンプルコード



目次



記事一覧

キーワード

C# サンプルコード

[C#][言語まとめ C#]


 ファイル

ファイル名を抽出

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);
    }

    /// <summary>
    /// 指定されたディレクトリのすべてのファイルのエンコードを変換して別のディレクトリに書き出す
    /// </summary>
    /// <param name="srcDir">変換元ディレクトリ</param>
    /// <param name="dstDir">変換先ディレクトリ</param>
    /// <param name="fromEnc">変換元エンコーディング</param>
    /// <param name="toEnc">変換後エンコーディング</param>
    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);
        }
    }

    /// <summary>
    /// 指定されたファイルのエンコードを変換して別ファイルに書き出す
    /// </summary>
    /// <param name="srcFile">変換元ファイル</param>
    /// <param name="dstFile">変換後ファイル</param>
    /// <param name="fromEnc">変換元エンコーディング</param>
    /// <param name="toEnc">変換後エンコーディング</param>
    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# 設定情報を保存する


 LINQ

C# LINQ使用例

 非同期処理

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

C# asyncとawaitの動作確認

 WPF

 HttpClient


同期通信

public void GetLoginToken()
{
    var param = new Dictionary<string, string>()
    {
        { "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());
    } 
}



YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto

Copyright© 矢木 浩人 All Rights Reserved.