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