「MonoやXamarinで絶対パスを取得する」の版間の差分
ナビゲーションに移動
検索に移動
16行目: | 16行目: | ||
{ | { | ||
var realPath = ""; | var realPath = ""; | ||
− | if (path.StartsWith("~", StringComparison.Ordinal)) | + | if (path.StartsWith("~/", StringComparison.Ordinal)) |
{ | { | ||
− | + | var homePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); | |
− | + | realPath = Path.Combine(homePath, path.Substring(2)); | |
− | |||
− | |||
− | |||
− | |||
− | realPath = Path.Combine(homePath, path.Substring( | ||
} | } | ||
else | else |
2018年3月9日 (金) 04:55時点における版
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))
{
var homePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
realPath = Path.Combine(homePath, path.Substring(2));
}
else
{
realPath = path;
}
return Path.GetFullPath(realPath);
}
}