2009-07-16 16 views
60

El uso de este:¿Cómo puedo obtener el directorio de usuario actual?

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 

puedo obtener este resultado:

"C:\\Documents and Settings\\[USER]\\Application Data" 

¿Cómo puedo obtener el directorio raíz de todos los usuarios? es decir:

"C:\\Documents and Settings\\[USER]\\" 
+1

La respuesta que terminé usando fue eliminada ... esto funciona: Path.GetDirectoryName (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData)) – juan

+1

Juan - eso no siempre funcionará para ti - acabas de tener suerte esta vez . –

+0

¿por qué es eso? quieres decir como en vista? o en xp de repente dejará de funcionar? – juan

Respuesta

34

puede ser que esto sea una buena solución: tomando en cuenta si se trata de Vista/Win7 o XP y sin utilizar variables de entorno:

string path = Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName; 
if (Environment.OSVersion.Version.Major >= 6) { 
    path = Directory.GetParent(path).ToString(); 
} 

Aunque el uso de la variable de entorno es mucho más clara.

3

Probar:

System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/ 
+1

Esto no funcionará en Windows 7, y supongo que tampoco funcionará en vista si recuerdo bien la estructura de la carpeta. El 7, tendrías que subir 2 carpetas principales porque la carpeta ApplicationData es \% userprofile% \ AppData \ Roaming \ –

+0

que devuelve "C: \ Users \ Fredrik \ AppData" en mi máquina Vista (la carpeta ApplicationData es " C: \ Users \ Fredrik \ AppData \ Roaming ") –

114

Probar:

System.Environment.GetEnvironmentVariable("USERPROFILE"); 

Editar:

Si la versión de .NET que está utilizando es 4 o superior, puede utilizar la enumeración Environment.SpecialFolder:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 
+11

Es una mala idea depender de las variables de entorno para darle las rutas de la carpeta. Hay demasiadas formas en que se pueden cambiar esas variables de entorno. La forma recomendada es con la enumeración Environment.SpecialFolder. –

+1

Desafortunadamente, como puede ver http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx, la carpeta USERPROFILE no está contenida en esa enumeración. – Thomas

+0

El Environment.SpecialFolder está incluido en .NET 1.1, simplemente no tiene la carpeta "UserProfile" ... – Vini

4
Environment.GetEnvironmentVariable("userprofile") 

Intentar navegar desde un SpecialFolder con nombre es propenso a problemas. Hay un montón de razones por las que las carpetas no serán donde se lo espera - los usuarios pueden moverse por su cuenta, GPO puede moverlos, la redirección de carpetas a las rutas UNC, etc.

Utilizando el environment variable para el perfil de usuario debe reflejar cualquiera de esos posibles problemas.

-3

se puede utilizar el siguiente código:

if(Platform.Equals("WinCE")) 
{ 
    m_CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase); 
} 
else if(Platform.Equals("Win32NT")) 
{ 
    m_CurrentPath = Directory.GetCurrentDirectory(); 
} 

más información ver: Get Current Directory Path in both WinXP and WinCE with C#

+3

Esto está completamente fuera de lugar aquí. El OP está pidiendo la carpeta _user_ actual, no la carpeta de trabajo. – julealgon

12

puede obtener la ruta PerfilUsuario con sólo esto:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

-3
$env:USERPROFILE = "C:\\Documents and Settings\\[USER]\\" 
+0

Eche un vistazo a los comentarios sobre la pregunta. Este no es el caso para todas las versiones de Windows. –

3

También muy útil, mientras que la investigación de la enumeración Environment.SpecialFolder. Utilice LINQPad o crear una solución y ejecutar este código:

Enum.GetValues(typeof(Environment.SpecialFolder)) 
    .Cast<Environment.SpecialFolder>() 
    .Select(specialFolder => new 
    { 
     Name = specialFolder.ToString(), 
     Path = Environment.GetFolderPath(specialFolder) 
    }) 
    .OrderBy(item => item.Path.ToLower()) 

Folder Paths

Este es el resultado en mi máquina:

MyComputer 
LocalizedResources 
CommonOemLinks 
ProgramFiles   C:\Program Files (x86) 
ProgramFilesX86   C:\Program Files (x86) 
CommonProgramFiles  C:\Program Files (x86)\Common Files 
CommonProgramFilesX86 C:\Program Files (x86)\Common Files 
CommonApplicationData C:\ProgramData 
CommonStartMenu   C:\ProgramData\Microsoft\Windows\Start Menu 
CommonPrograms   C:\ProgramData\Microsoft\Windows\Start Menu\Programs 
CommonAdminTools  C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
CommonStartup   C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 
CommonTemplates   C:\ProgramData\Microsoft\Windows\Templates 
UserProfile    C:\Users\fisch 
LocalApplicationData C:\Users\fisch\AppData\Local 
CDBurning    C:\Users\fisch\AppData\Local\Microsoft\Windows\Burn\Burn 
History     C:\Users\fisch\AppData\Local\Microsoft\Windows\History 
InternetCache   C:\Users\fisch\AppData\Local\Microsoft\Windows\INetCache 
Cookies     C:\Users\fisch\AppData\Local\Microsoft\Windows\INetCookies 
ApplicationData   C:\Users\fisch\AppData\Roaming 
NetworkShortcuts  C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Network Shortcuts 
PrinterShortcuts  C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Printer Shortcuts 
Recent     C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Recent 
SendTo     C:\Users\fisch\AppData\Roaming\Microsoft\Windows\SendTo 
StartMenu    C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu 
Programs    C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 
AdminTools    C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools 
Startup     C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 
Templates    C:\Users\fisch\AppData\Roaming\Microsoft\Windows\Templates 
Desktop     C:\Users\fisch\Desktop 
DesktopDirectory  C:\Users\fisch\Desktop 
Favorites    C:\Users\fisch\Favorites 
MyMusic     C:\Users\fisch\Music 
MyDocuments    C:\Users\fisch\OneDrive\Documents 
MyDocuments    C:\Users\fisch\OneDrive\Documents 
MyPictures    C:\Users\fisch\OneDrive\Pictures 
MyVideos    C:\Users\fisch\Videos 
CommonDesktopDirectory C:\Users\Public\Desktop 
CommonDocuments   C:\Users\Public\Documents 
CommonMusic    C:\Users\Public\Music 
CommonPictures   C:\Users\Public\Pictures 
CommonVideos   C:\Users\Public\Videos 
Windows     C:\Windows 
Fonts     C:\Windows\Fonts 
Resources    C:\Windows\resources 
System     C:\Windows\system32 
SystemX86    C:\Windows\SysWoW64 

BTW."fisch" son las primeras 5 letras de mi apellido (y es en alemán para "pez"). Este es el nombre de usuario asignado al iniciar sesión con una cuenta de Microsoft.

+0

No sé cómo nunca he oído hablar de LINQPad, lo probé, esto es genial, gracias por recomendarlo. – TravisO

Cuestiones relacionadas