.NET on linux, ~/folder is wrong?
In .NET i am writing
Directory.CreateDirectory(textBox4.Text);
textBox4.Text is ~/myfolder
. What i get is a folder in the current wor开发者_StackOverflow中文版king directory called ~ with myfolder in it. How do i have CreateDirectory create myfolder at the user's home?
Tilde expansion is normally handled by the shell (http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_01).
You could do something like bash -c "echo ~/folder"
and grab the output. I'm not familiar with a .NET API (or even a C API) that does this, though I have to imagine that one is out there somewhere.
I take that back - the glob()
C runtime function (on Linux) will take a GLOB_TILDE
flag to perform this expansion.
I end up using this
string GetHome()
{
string homePath = (Environment.OSVersion.Platform == PlatformID.Unix ||
Environment.OSVersion.Platform == PlatformID.MacOSX)
? Environment.GetEnvironmentVariable("HOME")
: Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
return homePath;
}
var saveDirectory = textBox4.Text;
if (saveDirectory.StartsWith("~/"))
saveDirectory = GetHome() + saveDirectory.Substring(1);
精彩评论