Files
LuaCsForBarotraumaEP/Libraries/MonoGame.Framework/Src/Tools/Pipeline/Common/Util.cs
2019-06-25 16:00:44 +03:00

51 lines
1.7 KiB
C#

using System;
using System.IO;
using System.Runtime.InteropServices;
namespace MonoGame.Tools.Pipeline
{
public static class Util
{
[DllImport("libc")]
private static extern string realpath(string path, IntPtr resolved_path);
public static string GetRealPath(string path)
{
// resolve symlinks on Unix systems
if (Environment.OSVersion.Platform == PlatformID.Unix)
return realpath(path, IntPtr.Zero);
return path;
}
/// <summary>
/// Returns the path 'filspec' made relative path 'folder'.
///
/// If 'folder' is not an absolute path, throws ArgumentException.
/// If 'filespec' is not an absolute path, returns 'filespec' unmodified.
/// </summary>
public static string GetRelativePath(string filespec, string folder)
{
if (!Path.IsPathRooted(filespec))
return filespec;
if (!Path.IsPathRooted(folder))
throw new ArgumentException("Must be an absolute path.", "folder");
filespec = Path.GetFullPath(filespec).TrimEnd(new[] { '/', '\\' });
folder = Path.GetFullPath(folder).TrimEnd(new[] { '/', '\\' });
if (filespec == folder)
return string.Empty;
var pathUri = new Uri(filespec);
var folderUri = new Uri(folder + Path.DirectorySeparatorChar);
var result = folderUri.MakeRelativeUri(pathUri).ToString();
result = result.Replace('/', Path.DirectorySeparatorChar);
result = Uri.UnescapeDataString(result);
return result;
}
}
}