環境変数PATHを探す

ファイル名を指定されたとき、環境変数PATHからフルファイル名を探したかったので、そういうコードを組んだ(linuxでいうところのwhich)。
System.Environment.GetEnvironmentVariable("Path")でPATHの文字列を取得し、splitで分割、foreachで探してExistsでチェックする。

以下サンプルコード。

using System;
using System.IO;

class env{
  static private string  SearchPath(string file){
    if(Path.GetExtension(file)==String.Empty){
      file = file + ".exe";
    }
    string path = System.Environment.GetEnvironmentVariable("Path");
    string [] patharray = path.Split(new Char[] {';'});    
    foreach(string p in patharray){
      string filename = p + "\\"+file;
      if(File.Exists(filename)){
        return filename;
      }
    }
    return null;
  }
  static void Main(string[] args){
    if(args.Length ==0){
       return;
    } 
    string filename = SearchPath(args[0]);
    if(filename==null){
      Console.WriteLine(args[0] + " is not found.");
    }else{
      Console.WriteLine(filename);
    }
  }
}

使い方。

% csc env.cs
$ ./env.exe ipconfig
c:\WINDOWS\system32\ipconfig.exe

こんな感じ。exeを適宜補っている。