C# NET中的路径解析器

C# NET中的路径解析器,c#,.net,C#,.net,我想要的是类似“which”命令的内容:提供文件名(exe,bat…)并返回该文件的完整路径: 哪个java.exe c:\windows\system32\java.exe 代码如下所示: string fileName = "java.exe" string fullPath = PathResolver.Resolve(fileName); 我们在.NET framework中有这样的功能吗 谢谢 更新: 最后,我自己写了一篇: // Reoslve the full path of

我想要的是类似“which”命令的内容:提供文件名(exe,bat…)并返回该文件的完整路径:

哪个java.exe
c:\windows\system32\java.exe

代码如下所示:

string fileName = "java.exe"
string fullPath = PathResolver.Resolve(fileName);
我们在.NET framework中有这样的功能吗

谢谢

更新:
最后,我自己写了一篇:

  // Reoslve the full path of a file name
    // fileName: of absolute path or relative path; with ext or without ext
    static string ResolvePath(string fileName)
    {
        // 0. absolute path
        string[] stdExts = { ".bat", ".cmd", ".pl", ".exe" };
        if (Path.IsPathRooted(fileName))
        {
            if (File.Exists(fileName))
            {
                return fileName;
            }
            else
            {
                foreach (string eachExt in stdExts)
                {
                    string fullPath = fileName + eachExt;
                    if (File.Exists(fullPath))
                    {
                        return fullPath;
                    }
                }
            }

            return "";
        }

        // 1. candidate extensions
        string fileNameNoExt = Path.GetFileNameWithoutExtension(fileName);
        string ext = Path.GetExtension(fileName);
        string[] candidateExts;
        if (string.IsNullOrEmpty(ext))
        {
            candidateExts = stdExts;
        }
        else
        {
            string[] exts = { ext };
            candidateExts = exts;
        }

        // 2. candidate path:
        //      http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx#search_order_for_desktop_applications
        List<string> candidatePaths = new List<string>();

        // application dir
        string fileApp = Process.GetCurrentProcess().MainModule.FileName;
        candidatePaths.Add(Path.GetDirectoryName(fileApp));

        // current dir
        candidatePaths.Add(Directory.GetCurrentDirectory());

        // system dir
        candidatePaths.Add(Environment.SystemDirectory);

        // windows dir
        string winDir = Environment.GetEnvironmentVariable("windir");
        candidatePaths.Add(winDir);

        // PATH
        string[] paths = Environment.GetEnvironmentVariable("PATH").Split(';');
        foreach (string path in paths)
        {
            // strip the trailing '\'
            candidatePaths.Add(Path.GetDirectoryName(path));
        }

        // 3. resolve
        foreach (string eachPath in candidatePaths)
        {
            foreach (string eachExt in candidateExts)
            {
                string fullPath = eachPath + "\\" + fileNameNoExt + eachExt;
                if (File.Exists(fullPath))
                    return fullPath;
            }
        }

        return "";
    }
//重新保存文件名的完整路径
//文件名:绝对路径或相对路径;有无分机
静态字符串解析路径(字符串文件名)
{
//0.绝对路径
字符串[]stdExts={.bat',.cmd',.pl',.exe};
if(Path.IsPathRooted(文件名))
{
if(File.Exists(fileName))
{
返回文件名;
}
其他的
{
foreach(stdExts中的字符串eachexts)
{
字符串完整路径=文件名+每个字符;
if(File.Exists(完整路径))
{
返回全路径;
}
}
}
返回“”;
}
//1.候选人延期
字符串FileNameNoText=Path.GetFileNameWithoutExtension(文件名);
字符串ext=Path.GetExtension(文件名);
字符串[]候选字符串;
if(string.IsNullOrEmpty(ext))
{
CandidateXts=标准指数;
}
其他的
{
字符串[]exts={ext};
candidatexts=exts;
}
//2.候选路径:
//      http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx#搜索(订单)查找(桌面)应用程序
列表候选路径=新列表();
//应用程序目录
字符串fileApp=Process.GetCurrentProcess().MainModule.FileName;
Add(Path.GetDirectoryName(fileApp));
//当前目录
Add(Directory.GetCurrentDirectory());
//系统目录
candidatePaths.Add(Environment.SystemDirectory);
//视窗目录
字符串winDir=Environment.GetEnvironmentVariable(“winDir”);
候选路径添加(winDir);
//路径
string[]PATH=Environment.GetEnvironmentVariable(“PATH”).Split(“;”);
foreach(路径中的字符串路径)
{
//去掉尾随的“\”
Add(Path.GetDirectoryName(Path));
}
//3.决心
foreach(在CandidatePath中字符串eachPath)
{
foreach(候选文本中的字符串eachExt)
{
字符串fullPath=eachPath+“\\”+文件名noext+eachExt;
if(File.Exists(完整路径))
返回全路径;
}
}
返回“”;
}

我不知道这是否能帮助您:

    public string PathResolver(string filename)
    {
        string[] paths = Environment.GetEnvironmentVariable("PATH").Split(';');
        foreach (string path in paths)
        {
            string fname = Path.Combine(path, filename);
            if (File.Exists(filename)) return fname;
        }
        return "";
    }

我不知道这是否能帮助你:

    public string PathResolver(string filename)
    {
        string[] paths = Environment.GetEnvironmentVariable("PATH").Split(';');
        foreach (string path in paths)
        {
            string fname = Path.Combine(path, filename);
            if (File.Exists(filename)) return fname;
        }
        return "";
    }
我不确定“which”命令做什么,但.net有
Type.GetTypeFromProgID(“java.exe”)

我不知道该从哪里开始,但它可能会有所帮助……

我不确定“which”命令的作用,但.net有
Type.GetTypeFromProgID(“java.exe”)

我不知道该从那里走到哪里,但也许这会有帮助…

看看
FileInfo
类的名称

FileInfo fi = new FileInfo("foo.exe");
string fullanme = fi.FullName;
查看
FileInfo
类的

FileInfo fi = new FileInfo("foo.exe");
string fullanme = fi.FullName;

我可以建议一种方法,在实际运行可执行文件后,仅使用文件名(可能不完全是您想要的)来查找该文件的完整路径:


我可以建议一种方法,在实际运行可执行文件后,仅使用文件名(可能不完全是您想要的)来查找该文件的完整路径:


你应该看看这个免费的库,它在独立项目和其他项目中使用


您应该看看这个免费的库,它用于独立项目和其他项目


是的,谢谢。我们当然可以自己编写一个,我们可以按照DLL搜索顺序:,但我希望在.NET framework中首先有一个现有的:)是的,谢谢。我们当然可以自己编写一个,我们可以按照DLL搜索顺序:,但我希望在.NET framework中首先有一个现有的:)我担心这不起作用,它返回一个类型-不应该用于COM编程吗?我担心这不起作用,它正在返回一个类型-不应该用于COM编程吗?这不会执行任何路径解析,而是返回:CurrentDir+foo.exe这不会执行任何路径解析,而是返回:CurrentDir+foo.exe谢谢,是的,这不是我想要的-我想先获取路径,然后启动应用程序:因为如果它是bat/cmd文件,我需要像这样运行它:cmd/c filename谢谢,是的,这不是我想要的-我想先得到路径,然后启动应用程序:因为如果它是一个bat/cmd文件,我需要像这样运行它:cmd/c filename谢谢,这是一个强大的库,但似乎没有包括我想要的路径解析程序。谢谢,这是一个强大的库,但似乎没有包含我想要的路径解析器。