LINQでファイルが存在するかどうかチェックする
C#でLINQを使ってファイルが存在するかどうかをチェックします。環境変数のPATHおよびPATHEXTの内容を考慮します。
※ 2015/03/19頂いたアドバイスを元に改良しました。
コード
var path = "探したいファイル";
var found = Environment.GetEnvironmentVariable("PATH").Split(';')
.Select(x => Path.Combine(x, path))
.SelectMany(_ => Environment.GetEnvironmentVariable("PATHEXT").Split(';')
.Concat(new String[] { Path.GetExtension(path) }),
(p, ext) => Path.ChangeExtension(p, ext))
.Any(File.Exists);
使用例
var path = "perl";
var found = Environment.GetEnvironmentVariable("PATH").Split(';')
.Select(x => Path.Combine(x, path))
.SelectMany(_ => Environment.GetEnvironmentVariable("PATHEXT").Split(';')
.Concat(new String[] { Path.GetExtension(path) }),
(p, ext) => Path.ChangeExtension(p, ext))
.Any(File.Exists);
// found => true(Perlがインストール済みの場合)
無理に一行で書こうとしたせいで冗長になってしまいました。
おまけ:もし見つかったらファイルパスを返す
最後のAnyをWhereに変えたらLinuxのwhichコマンドみたいなものもできました。LINQすごい。
whichっぽいの
var path = "perl";
var found = Environment.GetEnvironmentVariable("PATH").Split(';')
.Select(x => Path.Combine(x, path))
.SelectMany(_ => Environment.GetEnvironmentVariable("PATHEXT").Split(';')
.Concat(new String[] { Path.GetExtension(path) }),
(p, ext) => Path.ChangeExtension(p, ext))
.Where(File.Exists).FirstOrDefault();
// found => "c:\cygwin\bin\perl.EXE"(インストール済みの場合)
もし存在しないpathを指定すると、foundはnullとなります。
Author And Source
この問題について(LINQでファイルが存在するかどうかチェックする), 我々は、より多くの情報をここで見つけました https://qiita.com/TakamiChie/items/7e1e71a3bff62158d9a6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .