みんな大好きコンソールアプリケーションの新機能

この記事はC# Advent Calendar 2012 : ATNDへの参加エントリーです。

昨日はAILightさんの「dynamic型を利用した時のパフォーマンス調査」、

そしてxin9leさんの「拡張DisplayName属性」でした。

 

街はWindowsストアアプリだのALMだのAzureだのWindows Phone 8だのASP.NET MVC 4だのSignalRだのと大騒ぎですが、なんと言ってもクリスマスイヴといえばコンソールアプリですよね?w

というワケで.NET Framework 4.5になってもいまだライブラリ検証などでは大活躍!

コマンドライン大好きな僕らの味方、コンソールアプリケーションの新機能について紹介したいと思います。

 

コンソールアプリケーションといえば、主役はConsoleクラスですが、.NET Framework 4.5になって新機能が登場しています。

Consoleクラスの新機能

リダイレクトの検出を行うAPIが追加されています。

  • Console.IsInputRedirected
  • Console.IsOutputRedirected
  • Console.IsErrorRedirected

通常のコンソール出力を行う場合は特に必要ないかもしれませんが、たとえば色つきのテキストをコンソールに出力する場合など、リダイレクト時にはあまり必要とならない入出力を行う場合の判定用などに利用できそうです。

そこでせっかくなので確認用のサンプル・コード。

   1:      class Program
   2:      {
   3:          static void Main(string[] args)
   4:          {
   5:              if(Console.IsOutputRedirected == false) Console.ForegroundColor = ConsoleColor.Red;
   6:              Console.WriteLine("Merry Christmas!");
   7:              Console.ReadLine();
   8:          }
   9:      }

 

実行結果は以下のような感じですね。

image

つづけてコマンドライン引数でファイルに対する出力を行うリダイレクトを指定します。

プロジェクトのプロパティを開いて、デバッグタブでコマンドライン引数にリダイレクトの指定を記述します。

image

実行結果は以下のようになりました。

image

もちろん、画面(コンソール)には何も表示されていません。

そして、ソリューションエクスプローラーで「すべてのファイルを表示」ボタンをクリックしてDebugフォルダを確認すると…。

image

ファイルができていますね。 もちろん、中身は…。

image

ちゃんと出力されていますね。

もっともForegroundColorはコンソール出力に対する前景色の指定なので、リダイレクトされた場合のファイルの出力には影響はないのですが、今回は不要な処理を省くという目的で利用しています。

リダイレクトされた場合のみヘッダーを表示する・・・といった具合に特定の用途の判定に利用するには便利そうですね。

 

せっかくなので、Consoleクラスのメンバーも少し。

そして、一緒にConsoleクラスのいくつかの機能もご紹介しましょう。

上記のソースコードにもあるForegroudColorプロパティではConsoleの表示色を設定できます。

MS-DOS時代の色付けはESCシーケンスを駆使したものですが、今は簡単ですねー。

そして、ForegroundができるということはBackgroundもできます。

   1:      class Program
   2:      {
   3:          static void Main(string[] args)
   4:          {
   5:              Console.BackgroundColor = ConsoleColor.Red;
   6:              Console.WriteLine("Merry Christmas!");
   7:              Console.ReadLine();
   8:          }
   9:      }

実行結果は以下の通りです。

image

確かにコードの通り実行されているんですが、あまり派手ではありませんでしたね。

そこで、こんなコードを追加してみました。

   1:          static void Main(string[] args)
   2:          {
   3:              Console.BackgroundColor = ConsoleColor.Red;
   4:              Console.Clear();        //追加
   5:              Console.WriteLine("Merry Christmas!");
   6:              Console.ReadLine();
   7:          }

実行結果は以下の通りです。

image

ちょっと派手すぎましたかね(^^;

というワケでよいクリスマスをお過ごしください!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

投稿者: Hiroyuki Mori

極東IT-Engineersの代表でMicrosoft MVP for Development Platform - Silverlightです。 普段は主にMSテクノロジ関連の開発、スピーカー、執筆などを行っています。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *