Ответ 1
Вы пробовали:
string absolute = Path.GetFullPath(relative);
? Обратите внимание, что это будет использовать текущий рабочий каталог процесса, а не каталог, содержащий исполняемый файл. Если это не поможет, уточните свой вопрос.
Как преобразовать относительный путь в абсолютный путь в приложении Windows?
Я знаю, что мы можем использовать server.MapPath() в ASP.NET. Но что мы можем сделать в приложении Windows?
Я имею в виду, если есть встроенная функция .NET, которая может обрабатывать это...
Вы пробовали:
string absolute = Path.GetFullPath(relative);
? Обратите внимание, что это будет использовать текущий рабочий каталог процесса, а не каталог, содержащий исполняемый файл. Если это не поможет, уточните свой вопрос.
Если вы хотите получить путь относительно вашего .exe, используйте
string absolute = Path.Combine(Application.ExecutablePath, relative);
Это работает для путей на разных дисках, для относительных путей движения и для фактических относительных путей. Heck, он даже работает, если basePath
не является абсолютным; он всегда использует текущий рабочий каталог как окончательный резерв.
public static String GetAbsolutePath(String relativePath, String basePath)
{
if (relativePath == null)
return null;
if (basePath == null)
basePath = Path.GetFullPath("."); // quick way of getting current working directory
else
basePath = GetAbsolutePath(basePath, null); // to be REALLY sure ;)
String path;
// specific for windows paths starting on \ - they need the drive added to them.
// I constructed this piece like this for possible Mono support.
if (!Path.IsPathRooted(relativePath) || "\\".Equals(Path.GetPathRoot(relativePath)))
{
if (relativePath.StartsWith(Path.DirectorySeparatorChar.ToString()))
path = Path.Combine(Path.GetPathRoot(basePath), relativePath.TrimStart(Path.DirectorySeparatorChar));
else
path = Path.Combine(basePath, relativePath);
}
else
path = relativePath;
// resolves any internal "..\" to get the true full path.
return Path.GetFullPath(path);
}