MonoやXamarinで絶対パスを取得する
2018年3月9日 (金) 02:52時点における103.22.200.249 (トーク)による版
C#においてWindows上で絶対パスを取得するだけならばSystem.IO.Path.GetFullPathメソッドでいいわけだが、 Linux上のmonoやMacOS上のXamarinなどではホームディレクトリを表す「~(チルダ)」を解決してくれなくて残念な結果になる。
- ダメな例
Path.GetFullPath("~/Documents/");
- 解決策
置換すればいい。
using System;
using System.IO;
public static class PathUtil
{
public static string RealPath(string path)
{
var realPath = "";
if (path.StartsWith("~", StringComparison.Ordinal))
{
string homePath = (
Environment.OSVersion.Platform == PlatformID.Unix ||
Environment.OSVersion.Platform == PlatformID.MacOSX)
? Environment.GetEnvironmentVariable("HOME")
: Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
realPath = Path.Combine(homePath, path.Substring(1));
}
else
{
realPath = path;
}
return Path.GetFullPath(realPath);
}
}