「MonoやXamarinで絶対パスを取得する」の版間の差分

ページの作成:「Windows上で絶対パスを取得するだけならばSystem.IO.Path.GetFullPathメソッドでいいわけだが、 Linux上のmonoやMacOS上のXamarinなどではホ...」
 
編集の要約なし
 
(同じ利用者による、間の3版が非表示)
1行目: 1行目:
Windows上で絶対パスを取得するだけならばSystem.IO.Path.GetFullPathメソッドでいいわけだが、
C#において[[Windows]]上で絶対パスを取得するだけならばSystem.IO.Path.GetFullPathメソッドでいいわけだが、
Linux上のmonoやMacOS上のXamarinなどではホームディレクトリを表す「~(チルダ)」を解決してくれなくて残念な結果になる。
[[Linux]]上の[[mono]]や[[MacOS]]上の[[Xamarin]]などではホームディレクトリを表す「~(チルダ)」を解決してくれなくて残念な結果になる。


; ダメな例
; ダメな例
10行目: 10行目:
     using System;
     using System;
     using System.IO;
     using System.IO;
    using System.Runtime.InteropServices;


     public static class PathUtil
     public static class PathUtil
16行目: 17行目:
         {
         {
             var realPath = "";
             var realPath = "";
             if (path.StartsWith("~", StringComparison.Ordinal))
             if (path.StartsWith("~/", StringComparison.Ordinal))
             {
             {
#if NETCOREAPP
                string homePath = (
                    RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ||
                    RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
                        ? Environment.GetEnvironmentVariable("HOME")
                        : Environment.GetEnvironmentVariable("UserProfile");
#else
                 string homePath = (
                 string homePath = (
                     Environment.OSVersion.Platform == PlatformID.Unix ||
                     Environment.OSVersion.Platform == PlatformID.Unix ||
23行目: 31行目:
                         ? Environment.GetEnvironmentVariable("HOME")
                         ? Environment.GetEnvironmentVariable("HOME")
                         : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
                         : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
 
#endif               
                 realPath = Path.Combine(homePath, path.Substring(1));
                 realPath = Path.Combine(homePath, path.Substring(2));
             }
             }
             else
             else
33行目: 41行目:
             return Path.GetFullPath(realPath);
             return Path.GetFullPath(realPath);
         }
         }
    }
</source>
</source>