プログラム

C#プログラミングレッスン

C#での .NETプログラミングを易しく丁寧に解説するメールマガジンです。「C#プログラミング・レッスン」で、.NETプログラミングをマスターしましょう。

全て表示する >

【C#プログラミングレッスン】 No.142-Process(3)

2007/09/25

┏━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━┳━┳━┓
┃☆┃ C#プログラミングレッスン                         ┃_┃□┃×┃
┣━┻━━━━━━━━━━━━━━━━━━━━━━━━━┻━┻━┻━┫
┃ Process(3)                                                 No.142┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛


■──────────────────────────────────
■ 標準出力の内容を読み取る

Process クラスの説明の最後として、ちょっと変わったコードをお見せしまし
ょう。


using System;
using System.Diagnostics;
using System.Text.RegularExpressions;

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {

            Process process = new Process();
            process.StartInfo.FileName = "ipconfig.exe";
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            process.Start();
            process.WaitForExit();

            string output = process.StandardOutput.ReadToEnd();

            Regex regex = new Regex(@"IP Address.+:\s([0-9.]+)\s");
            Match m = regex.Match(output);
            if ( m.Success ) {
                Console.WriteLine("IP Address:{0}",m.Groups[1]);
            }

        }
    }
}


この例は、コンソールアプリケーションの ipconfig.exe コマンドを起動し、
その標準出力への結果を、プログラムで取得するものです。

  process.StartInfo.RedirectStandardOutput = true;
  process.StartInfo.UseShellExecute = false;

この2行が、プロセス起動時に設定で、キーとなる部分です。これで、標準出
力への結果が Process.StandardOutput ストリームに書き込まれるようになり
ます。

その後、

  process.WaitForExit();

で、終了まで待ち、

  string output = process.StandardOutput.ReadToEnd();

で、いっきに、output変数に読み込みます。実際には、

---------------------------------------------------------
Windows IP Configuration


Ethernet adapter ローカル エリア接続:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 10.1.2.123
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 10.1.2.254
---------------------------------------------------------

といった文字列が、outputに入ります。
この output 文字列から Regex クラスを使って、IP アドレスを取得し、コン
ソールに表示しています。

Regex のコンストラクタの引数に与える正規表現を変えれば、Default Gateway
の値を取得することも可能です。

┌─┬─────────────────────────┬─┬─┬─┐
│☆│ C#プログラミングレッスン  (ぼぼ週刊)            │_│□│×│
├─┴─────────────────────────┴─┴─┴─┤
│ Published by Gushwell.                                           │
│ Copyright (C) 2004-2007 Gushwell All rights reserved.            │
│ Microsoft MVP Visual Developer - Visual C#(Apr 2005 - Mar 2008)  │
│-------------------- Gushwell's Page ---------------------------- │
│ 窓際プログラマーの独り言  :http://blog.livedoor.jp/gushwell/    │
│ 窓際プログラマーの読書三昧:http://gushwell.jugem.jp/            │
│ Gushwell's C# Programing Page:http://gushwell.ifdef.jp/         │
│ C#デザインパターン :                                             │
│  『増補改訂版Java言語で学ぶデザインパターン入門 / 結城 浩(著)』  │
│   のサンプルコードをC#に移植したものを掲載しています。           │
│   移植後のコードの公開は、結城氏の了解を得ています。             │
│   http://blog.livedoor.jp/gushwell/archives/50333227.html        │
└─────────────────────────────────┘

規約に同意してこのメルマガに登録/解除する

メルマガ情報

創刊日:2004-08-12  
最終発行日:  
発行周期:ほぼ週刊  
Score!: 非表示   

コメント一覧コメントを書く

この記事にコメントを書く

上の画像で表示されている文字を半角英数で入力してください。

※コメントの内容はこのページに公開されます。発行者さんだけが閲覧できるものではありません。 コメントの投稿時は投稿者規約への同意が必要です。

  • コメントはありません。