2010-07-19 3 views
5

Dans .NET Je vous écris.NET sur Linux, ~/dossier est faux?

Directory.CreateDirectory(textBox4.Text); 

textBox4.Text est ~/myfolder. Ce que je reçois est un dossier dans le répertoire de travail courant appelé ~ avec myfolder dedans. Comment CreateDirectory crée-t-il myFolder au domicile de l'utilisateur?

Répondre

1

je finis à l'aide de cette

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); 
2

L'expansion de tilde est normalement gérée par le shell (http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_01).

Vous pouvez faire quelque chose comme bash -c "echo ~/folder" et récupérer la sortie. Je ne suis pas familier avec une API .NET (ou même une API C) qui le fait, bien que je doive imaginer que quelqu'un est là quelque part.

Je prends cela en arrière - la fonction d'exécution glob() C (sous Linux) prendra un drapeau GLOB_TILDE pour effectuer cette extension.