2010-07-19 13 views
5

En .NET estoy escribiendo.NET en Linux, ~/carpeta está mal?

Directory.CreateDirectory(textBox4.Text); 

textBox4.Text es ~/myfolder. Lo que obtengo es una carpeta en el directorio de trabajo actual llamado ~ con myfolder. ¿Cómo creo CreateDirectory myfolder en la casa del usuario?

Respuesta

1

que terminan usando este

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

La expansión de Tilde se maneja normalmente por el shell (http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_01).

Puede hacer algo como bash -c "echo ~/folder" y obtener el resultado. No estoy familiarizado con una API de .NET (o incluso una API de C) que hace esto, aunque tengo que imaginar que uno está por ahí en alguna parte.

Recupero eso - la función de tiempo de ejecución C de glob() (en Linux) tomará un indicador GLOB_TILDE para realizar esta expansión.