C# NET中的路径解析器
我想要的是类似“which”命令的内容:提供文件名(exe,bat…)并返回该文件的完整路径: 哪个java.exeC# 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
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谢谢,这是一个强大的库,但似乎没有包括我想要的路径解析程序。谢谢,这是一个强大的库,但似乎没有包含我想要的路径解析器。