【原创源码】(05):C#-计算绝对路径。
/**//// <summary>
/// 计算绝对路径
/// </summary>
/// <param name="absoluteDir">绝对目录</param>
/// <param name="relativeFile">相对文件</param>
/// <returns></returns>
/// <example>
/// @"D:\Windows\regedit.exe" = GetAbsolutePath(@"D:\Windows\Web\Wallpaper\", @"..\..\regedit.exe" );
/// </example>
public static string GetAbsolutePath(string absoluteDir, string relativeFile)
{
bool isNotOver = true;
int intStart = 0;
while (isNotOver)
{
if (relativeFile.StartsWith(@"..\"))
{
relativeFile = relativeFile.Remove(0, 3);
intStart++;
}
else
{
isNotOver = false;
}
}
if (intStart > 0)
{
if (absoluteDir.EndsWith("\\"))
{
absoluteDir = absoluteDir.Remove(absoluteDir.Length - 1);
}
for (int i = 0; i < intStart; i++)
{
absoluteDir = absoluteDir.Remove(absoluteDir.LastIndexOf("\\"));
}
}
return Path.Combine(absoluteDir, relativeFile);
}
欢迎大家发表意见(漏洞,性能等)。在博客园社区以外转载,请注明作者和出处。谢谢!
/**//// <summary>
/// 计算绝对路径
/// </summary>
/// <param name="absoluteDir">绝对目录</param>
/// <param name="relativeFile">相对文件</param>
/// <returns></returns>
/// <example>
/// @"D:\Windows\regedit.exe" = GetAbsolutePath(@"D:\Windows\Web\Wallpaper\", @"..\..\regedit.exe" );
/// </example>
public static string GetAbsolutePath(string absoluteDir, string relativeFile)
{
bool isNotOver = true;
int intStart = 0;
while (isNotOver)
{
if (relativeFile.StartsWith(@"..\"))
{
relativeFile = relativeFile.Remove(0, 3);
intStart++;
}
else
{
isNotOver = false;
}
}
if (intStart > 0)
{
if (absoluteDir.EndsWith("\\"))
{
absoluteDir = absoluteDir.Remove(absoluteDir.Length - 1);
}
for (int i = 0; i < intStart; i++)
{
absoluteDir = absoluteDir.Remove(absoluteDir.LastIndexOf("\\"));
}
}
return Path.Combine(absoluteDir, relativeFile);
}
下面这个方法效率是楼上的1/50。。。
public static string GetAbsolutePath(string dir, string path)
{
string strDir = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(dir);
string strNew = Path.GetFullPath(path);
Directory.SetCurrentDirectory(strDir);
return strNew;
}