「Monoや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 | ||
18行目: | 19行目: | ||
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 = ( | ||
+ | Environment.OSVersion.Platform == PlatformID.Unix || | ||
+ | Environment.OSVersion.Platform == PlatformID.MacOSX) | ||
+ | ? Environment.GetEnvironmentVariable("HOME") | ||
+ | : Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%"); | ||
+ | #endif | ||
realPath = Path.Combine(homePath, path.Substring(2)); | realPath = Path.Combine(homePath, path.Substring(2)); | ||
} | } | ||
28行目: | 41行目: | ||
return Path.GetFullPath(realPath); | return Path.GetFullPath(realPath); | ||
} | } | ||
− | |||
</source> | </source> | ||
2018年3月9日 (金) 05:15時点における最新版
C#においてWindows上で絶対パスを取得するだけならばSystem.IO.Path.GetFullPathメソッドでいいわけだが、 Linux上のmonoやMacOS上のXamarinなどではホームディレクトリを表す「~(チルダ)」を解決してくれなくて残念な結果になる。
- ダメな例
Path.GetFullPath("~/Documents/");
- 解決策
置換すればいい。
using System;
using System.IO;
using System.Runtime.InteropServices;
public static class PathUtil
{
public static string RealPath(string path)
{
var realPath = "";
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 = (
Environment.OSVersion.Platform == PlatformID.Unix ||
Environment.OSVersion.Platform == PlatformID.MacOSX)
? Environment.GetEnvironmentVariable("HOME")
: Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
#endif
realPath = Path.Combine(homePath, path.Substring(2));
}
else
{
realPath = path;
}
return Path.GetFullPath(realPath);
}