「MonoやXamarinで絶対パスを取得する」の版間の差分
ページの作成:「Windows上で絶対パスを取得するだけならばSystem.IO.Path.GetFullPathメソッドでいいわけだが、 Linux上のmonoやMacOS上のXamarinなどではホ...」 |
編集の要約なし |
||
| (同じ利用者による、間の3版が非表示) | |||
| 1行目: | 1行目: | ||
C#において[[Windows]]上で絶対パスを取得するだけならばSystem.IO.Path.GetFullPathメソッドでいいわけだが、 | |||
[[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( | realPath = Path.Combine(homePath, path.Substring(2)); | ||
} | } | ||
else | else | ||
| 33行目: | 41行目: | ||
return Path.GetFullPath(realPath); | return Path.GetFullPath(realPath); | ||
} | } | ||
</source> | </source> | ||