System.Environmentクラスは、名前の通りシステムの環境周りの情報などを
取得できたりします。
実用性があるところで、改行コードの取得やカレントディレクトリの取得、システムディレクトリ
へのパス、環境変数の取得、OSのバージョン情報などを取得できたりします。
また、javaのjava.lang.System場合と同じくプロセスを終了させるExitメソッドも定義されています。
このクラスのメソッドは全てstaticとなっていますのでインスタンスを作成せずに利用できます。
以下サンプルです。
// vim:set ts=4 sw=4 et ws is nowrap ft=cs: using System; using System.Collections; using Gsf.Research.ClassLibrary; namespace Gsf.Research.ClassLibrary.System{ /// <summary> /// System.Environmentクラスのサンプルです。 /// </summary> /// <remarks> /// System.Environmentクラスは、システムの環境情報やシステムディレクトリの情報 /// などを返すクラスです。 /// FailFastメソッドは、実行するとアプリケーションを強制終了(即死)させます。 /// この場合、通常実行されるはずのfinallyブロックも通らなくなります。 /// </remarks> public class EnvironmentResearch00 : IExecutable{ /// <summary> /// 処理を実行します。 /// </summary> public void Execute(){ // // Environmentクラスのメソッドは、全てstaticメソッドです。 // // // CommandLine, GetCommandLineArgs() // // これらのメソッドは、起動時にコマンドラインに与えられた // 文字列を返します. // このメソッドは、Mainメソッドにて、Main()と宣言されている // 場合でも、引数を受け取れます. // // CommandLineプロパティは、一つの文字列として、GetCommandLineArgs()は // 配列として受け取れます. // (プログラム名も含まれることに注意.) // Console.WriteLine(Environment.CommandLine); foreach(string element in Environment.GetCommandLineArgs()){ Console.WriteLine(element); } // // CurrentDirectory. // // そのままですが、カレントディレクトリを表します。 // get;set;が用意されていますので、取得および設定が可能です。 // // 取得できるパスは、絶対パスとなっています。 // // ルートドライブを指定した場合は,後ろに\(円記号)がつきます。 // しかし、サブディレクトリを指定した場合は、後ろに円記号は // 付かないので注意です。 // // string tmpCurrentDirectory = Environment.CurrentDirectory; Console.WriteLine(Environment.CurrentDirectory); Environment.CurrentDirectory = "/"; Console.WriteLine(Environment.CurrentDirectory); Environment.CurrentDirectory = "/usr/local/tmp"; Console.WriteLine(Environment.CurrentDirectory); Environment.CurrentDirectory = tmpCurrentDirectory; // // HasShutdownStarted. // // CLRが終了処理中か、現在のアプリケーションドメインがアンロード中かどうかが // 取得できます. // Console.WriteLine(Environment.HasShutdownStarted); // // NewLine. // // 現在実行しているシステムでの改行コードを取得します. // javaでいうと、System.getProperty("line.separator")と同じです。 // Console.WriteLine("line1.{0}line2.", Environment.NewLine); // // OSVersion. // // 現在稼動中のOSの情報を取得します. // Environment.OSVersionから取得できるのは // System.OperatingSystemオブジェクトです。 // Console.WriteLine(Environment.OSVersion.VersionString); // // StackTrace. // // 現在の処理でのスタックとレースを取得します. // Console.WriteLine(Environment.StackTrace); // // ExpandEnvironmentVariablesメソッド. // // 環境変数を含んだ文字列を渡すと、それを展開して返してくれます. // 環境変数は、%で囲んで記述する必要があります。 // 存在しない環境変数を書いている場合は、置換されずにそのままになります。 // Console.WriteLine(Environment.ExpandEnvironmentVariables("%windir%;;;;;;;;;%path%;;;%home%")); // // GetEnvironmentVariableメソッド // // 指定した環境変数の値を文字列として取得できます。 // // こちらは、上記のExpandEnvironmentVariablesと違い環境変数名を // %で囲む必要はありません。 // その代わり指定できる環境変数は一つだけです。 // 存在しない環境変数を指定した場合は、nullが返却されます。 // Console.WriteLine(Environment.GetEnvironmentVariable("path")); // // GetEnvironmentVariablesメソッド // // 環境変数の値を全て返します。 // // 帰ってくる値は、IDictionaryオブジェクトです。 // キーに環境変数名、値にはその環境変数の値が格納されています。 // 環境変数が一つも存在しない場合は、空のディクショナリが返却されます。 // foreach(DictionaryEntry entry in Environment.GetEnvironmentVariables()){ Console.WriteLine("key={0}, value={1}", entry.Key, entry.Value); } // // SetEnvironmentVariableメソッド. // // GetEnvironmentVariableメソッドの逆です。 // 環境変数を作成・更新・削除します。 // // ・存在しない環境変数の場合は、作成。 // ・存在している環境変数にnull以外の値をセットすると更新。 // ・存在している環境変数にnullをセットすると削除。 // になります。 // string name = "MY_ENV"; // 作成 Environment.SetEnvironmentVariable(name, "hoge"); Console.WriteLine(Environment.GetEnvironmentVariable(name)); // 更新 Environment.SetEnvironmentVariable(name, "hehe"); Console.WriteLine(Environment.GetEnvironmentVariable(name)); // 削除 Environment.SetEnvironmentVariable(name, null); Console.WriteLine(Environment.GetEnvironmentVariable(name) ?? "該当する環境変数は存在しません。"); // // GetFolderPathメソッド. // // システムディレクトリへのパスを取得できます。 // 引数に指定するのは、Environment.SpecialFolder列挙体の値です。 // // プログラムファイルフォルダへのパスや、ユーザごとのアプリケーションフォルダへの // パスなどが定義されています。 // Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)); Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.Programs)); Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)); Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)); Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)); Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)); // // GetLogicalDrivesメソッド. // // 論理ドライブ名の配列を取得します。 // foreach(string drive in Environment.GetLogicalDrives()){ Console.WriteLine(drive); } // // Exitメソッド. // // プロセスを終了し、指定した終了コードをOS側に返します. // javaでいう, System.exit()と同じです。 // // 終了コード 0 でプロセスを終了させる //Environment.Exit(0); // // FailFastメソッド // // Exitメソッドと同じくプロセスを終了させますが、 // こちらは、強制終了という形になります。 // このメソッドを使用してプロセスを終了させた場合は、 // 通常必ず通るはずのfinallyブロックも通らずにプロセスが // 終了します。 // 使う場合は、要注意です。 // // 引数に指定したメッセージとプログラムのダンプが、イベントログに書き込まれます。 // /* try{ Environment.FailFast("プロセスが強制終了しました。"); }finally{ Console.WriteLine("ここは表示されません。"); } */ } } }
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場