MonoやXamarinで絶対パスを取得する

提供: MonoBook
2018年3月9日 (金) 02:52時点における103.22.200.249 (トーク)による版
ナビゲーションに移動 検索に移動

C#においてWindows上で絶対パスを取得するだけならばSystem.IO.Path.GetFullPathメソッドでいいわけだが、 Linux上のmonoMacOS上の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);
        }
    }