Bien, he comprobado Environment.SpecialFolder, pero no hay nada allí para esto.
Quiero obtener el directorio de inicio del usuario actual en C #. (por ejemplo, c:\documents and settings\user
bajo XP, c:\users\user
Vista y /home/user
Unix).
Sé que puedo leer variables ambientales para averiguarlo, pero quiero hacerlo de forma multiplataforma.
¿Hay alguna forma de que pueda hacer esto con .NET (preferiblemente usando mscorlib)?
ACTUALIZACIÓN : Bien, este es el código que terminé usando:
string homePath = (Environment.OSVersion.Platform == PlatformID.Unix ||
Environment.OSVersion.Platform == PlatformID.MacOSX)
? Environment.GetEnvironmentVariable("HOME")
: Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
Respuestas:
Environment.SpecialFolder.Personal
en realidad no devuelve la carpeta de inicio, devuelve la carpeta Mis documentos . La forma más segura de obtener la carpeta de inicio en Win32 es leer%HOMEDRIVE%%HOMEPATH%
. La lectura de las variables de entorno es en realidad muy portátil que hacer (a través de Unix y Windows), así que no estoy seguro de por qué el cartel quería no hacerlo.Editado para agregar: Para multiplataforma (Windows / Unix) C #, leería
$HOME
en Unix y OSX y%HOMEDRIVE%%HOMEPATH%
en Windows.fuente
Personal es Mis documentos (o Documentos en win7 y superior).
fuente
Creo que lo que buscas es:
Como referencia, de hecho está contenido en
mscorlib
.fuente
En DotNetCore 1.1
System.Environment.SpecialFolder
no existe. Podría existir en 2.0-beta. Hasta entonces, para hacer esto puedes usar lo siguiente:fuente
System.Environment.SpecialFolder
existeLa respuesta final es No. No hay un método simple basado en el sistema en .NET para obtener el directorio de inicio, de modo que podríamos esperar una implementación tanto en .NET en Windows como en Mono.
Deberá realizar alguna detección del sistema operativo y pasar al código específico del sistema operativo.
fuente
Cuando dice multiplataforma, ¿qué otros sistemas operativos necesita admitir? Es posible que deba realizar una detección simple del sistema operativo para seleccionar el método para encontrar el directorio de inicio si está ejecutando un sistema operativo que no es Windows.
Este sitio web parece ofrecer una forma de hacer lo que necesita en Windows.
fuente
Esto se puede hacer usando
GetEnvironmentVariable
enSystem.IO
:Luego produce debajo de las ventanas:
C:\\\\Users\\myusername\\myFolder
Tenga en cuenta que si usa
falla porque produce:
\\Users\\myusername\\myFolder
fuente
No tengo una máquina para probarlo, pero
%HOMESHARE%
podría funcionar para usted. De lo contrario, aquí hay una lista bastante buena de variables de entorno .fuente