パスは起動したフォルダを基準とした相対パスになります。
したがって、new DirectoryInfo(".");
でプログラムを起動したフォルダを取得できます。
プログラムの実行ファイルを置いてあるフォルダは
Application.StartupPath で取得できます。
System.Environment.GetFolderPath を利用することで
デスクトップやマイドキュメントなどの特殊なフォルダのパスを取得できます。
文字コードを指定してファイルを読み書きするには、
StreamReader/StreamWriter クラスのコンストラクタで Encoding クラスを渡してやります。
日本語 Windows 環境では、Encoding.Default でシフト JIS の Encoding が得られる。
StreamReader fin = new StreamReader( "in file", Encoding.Default); StreamWriter fout = new StreamWriter( "out file", false, Encoding.Default);
ちなみに、シフト JIS のコードページは 932。 (日本語 Windows では)以下のコードと上のコードは同じ結果に。
StreamReader fin = new StreamReader( "in file", Encoding.GetEncoding(932)); StreamWriter fout = new StreamWriter( "out file", false, Encoding.GetEncoding(932));
Encoding クラスの GetBytes メソッドを使います。
文字コードの指定は Encoding クラスを用いて行います。
シフトJISのコードページは 932 です。
また、日本語 Windows 環境では Encoding.Default によってシフトJISのエンコーディングクラスを取得できます。
Encoding.GetEncoding(932).GetBytes(str); Encoding.Default.GetBytes(str);
System.Text.RegularExpressions クラスを用いることで文字列の正規表現検索が出来ます。
.NET Framework の正規表現は Perl5 の正規表現と親和性の高いデザインになっています。
参考: 「文字列関係」
詳しくはヘルプの「.NET Framework の正規表現」や「正規表現言語要素」をご覧ください。
正規表現を使って文字のクラスを調べられる。 平仮名は文字クラス IsHiraganaに、 片仮名は IsKatakana、漢字は IsCJKUnifiedIdeographs にマッチする。
// 平仮名だけからなる単語にマッチ Regex hira = new Regex(@"\b\p{IsHiragana}+\b"); // 片仮名にマッチ Regex kata = new Regex(@"\p{IsKatakana}"); // 漢字にマッチ Regex kanji = new Regex(@"\p{IsCJKUnifiedIdeographs}");
その他にも文字クラス名を指定することでさまざまな文字クラスが判定可能。 文字クラス名はunicode.orgにあるブロック名一覧のブロック名にIsをつけたもの。
DateTime.ParseExact メソッドで、
以下のようにしてフォーマットを指定。
string str = "08/Jul/2006:03:28:50 +0900"; Date d = DateTime.ParseExact(str, "d'/'MMM'/'yyyy':'HH':'mm':'ss zzz", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None);
System.Console.Write(string, params object[]) を使えばフォーマット出力が可能です。
パラメータの書式は以下の通り
{N,M:format}
N: パラメータのインデックス
M: 表示する幅。不足分はスペースで埋められる。正の数の場合右詰、負の数の場合左詰。
format: 書式指定。パラメータが IFormattable インターフェースを実装している場合、この書式に従って整形される。
ちなみに、Console.Write の書式指定の仕方は、 string.Format メソッドの書式指定と同じです。 string.Format メソッドに関しては、 「文字列関係」 で概説しているので、そちらを参照。
また、詳細はヘルプで見ることが出来ます。
例)
int width, height;
scanf("width %d height %d", &width, &height);
1)正規表現を使う
const string pattern = @"height (?<height>\w+) width (?<width>\w+)"; Regex x = new Regex(pattern); string str = Console.ReadLine(); Match m = x.Match(str); int width = m.Group("width"); int height = m.Group("height");
2) Split を使う
string str = Console.ReadLine(); sring strs = str.Split(' '); int width = int.Parse(strs[1]); int height = int.Parse(strs[3]);
using System.Drawing; using System.Resources; class CreateResource { public static void Main() { using(ResourceWriter writer = new ResourceWriter("リソースファイル.resources")) { writer.AddResource("リソース名", new Icon("ファイル.ico")); writer.Generate(); } } }
後はコンパイル時に /res を指定するだけ。
ResourceManager rm = new ResourceManager( "アセンブリ名", this.GetType().Assembly); this.Icon = (System.Drawing.Icon)rm.GetObject("リソース名");
System.Runtime.InteropServices.StructLayout アトリビュートを使って構造体のレイアウトを指定できます。
LayoutKind.Auto … 自動レイアウト
LayoutKind.Explicit … FieldOffset アトリビュートを使って明示的にレイアウト
LayoutKind.Sequential … 宣言した順にレイアウト
LayoutKind.Sequential をコンストラクタに渡した場合、
Pack プロパティでパッキングサイズを調整できます。
デフォルトの Pack の値は 8 です。
構造体のレイアウトを LayoutKind.Explicit にすることで
C 言語の共用体のような使い方が出来ます。
using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Explicit)] struct Hoge { [FieldOffset(0)] public byte B; [FieldOffset(0)] public int N; } class Test { public static void Main() { Hoge h = new Hoge(); h.N = 257; Console.WriteLine(h.B); // 1 が表示される } }
Microsoft.Win32.SystemEvents クラスのパブリックイベントで表示設定変更、時刻の変更、メモリ不足などのイベントを拾える。
マニフェストを使用して Comctl32.dll version 6 がバインディングされるように設定する。 具体的な方法は以下の通り。
以下のXMLを「[実行ファイル名].manifest」という名前で保存し、 実行ファイルと同じディレクトリに置く。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
マニフェストを実行ファイル中に埋め込むためには、 リソースタイプ「RT_MANIFEST」、ID「1」のリソースとして埋め込む。 Visual Studio .NET を使えば、以下の手順で簡単にマニフェストの埋め込みが出来る。
Paint イベントを使ってフォームの際描写を行うと描写がちらついてしまう。 (OnPait メソッドでは、背景の塗りつぶしを行ってから Paint イベントハンドラを呼び出すため。) OnPaintBackground メソッドをオーバーライドして描写を行えばちらつきはなくなる。
Ngen.exe (native image generater)で出来ます。 詳しくは ms-help://MS.NETFrameworkSDK.JA/cptools/html/cpgrfnativeimagegeneratorngenexe.htmを参照してください。
https://sourceforge.jp/projects/sharpdevelop-jp
Visual C# 2005 Express Edision が無料で利用可能になった。