Is there any way to find a path in C# dynamically without executing "where" command prompt command?
For example, if I want to find mspaint exe, I can type this in command prompt
where mspaint
and it returns the path.
Is there any way to find a path in C# dynamically without executing "where" command prompt command?
For example, if I want to find mspaint exe, I can type this in command prompt
where mspaint
and it returns the path.
I don't think there is a built-in method in the Common Language Runtime to do this for you, but you can certainly do it yourself:
PATH
environment variable;
delimiters to get a list of directories in the pathprogram
Example:
public static string FindInPath(string filename)
{
var path = Environment.GetEnvironmentVariable("PATH");
var directories = path.Split(';');
foreach (var dir in directories)
{
var fullpath = Path.Combine(dir, filename);
if (File.Exists(fullpath)) return fullpath;
}
// filename does not exist in path
return null;
}
Don't forget to add .exe
to the filename. (Or, you could modify the code above to search for any executable extension: .bat
, .com
, .exe
; or perhaps even any extension at all.)
This is based on @TypeIA's answer, but it supports the current directory and all PATHEXT
.
public static string Where(string file)
{
var paths = Environment.GetEnvironmentVariable("PATH").Split(';');
var extensions = Environment.GetEnvironmentVariable("PATHEXT").Split(';');
return (from p in new[] { Environment.CurrentDirectory }.Concat(paths)
from e in new[] { string.Empty }.Concat(extensions)
let path = Path.Combine(p.Trim(), file + e.ToLower())
where File.Exists(path)
select path).FirstOrDefault();
}