Comment puis-je obtenir le répertoire utilisateur actuel?

100

En utilisant ceci:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

J'obtiens cette sortie:

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

Comment puis-je obtenir le répertoire racine de tous les utilisateurs? c'est à dire:

"C:\\Documents and Settings\\[USER]\\"
Juan
la source
1
La réponse que j'ai fini par utiliser a été supprimée ... cela fonctionne: Path.GetDirectoryName (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData))
juan
2
Juan - ça ne marchera pas toujours pour toi - tu as eu de la chance cette fois.
Scott Ivey
pourquoi donc? tu veux dire comme dans Vista? ou dans xp, il cessera soudainement de fonctionner?
juan
5
voir le commentaire de Scott sur la réponse de Jay Riggs. Sur W7 et Vista, le dossier Application Data se trouve à un endroit différent, vous devrez donc remonter de 2 répertoires, par opposition à 1.
Thomas

Réponses:

48

Ce sera peut-être une bonne solution: en prenant en compte s'il s'agit de Vista / Win7 ou XP et sans utiliser de variables d'environnement:

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

Bien que l'utilisation de la variable d'environnement soit beaucoup plus claire.

Anton Kolesov
la source
165

Essayer:

System.Environment.GetEnvironmentVariable("USERPROFILE");

Éditer:

Si la version de .NET que vous utilisez est 4 ou supérieure, vous pouvez utiliser l' Environment.SpecialFolderénumération:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
Thomas
la source
16
C'est une très mauvaise idée de dépendre des variables d'environnement pour vous donner les chemins des dossiers. Il y a trop de façons de modifier ces variables d'environnement. La méthode recommandée consiste à utiliser l'énumération Environment.SpecialFolder.
Jim Mischel
1
Malheureusement, comme vous pouvez le voir msdn.microsoft.com/en-us/library/ ... le dossier USERPROFILE n'est pas contenu dans cette énumération.
Thomas
L'environnement.SpecialFolder est inclus à partir de .NET 1.1, mais n'a tout simplement pas de dossier "UserProfile" ...
Vini
@JimMischel Mais ceux-ci ne sont-ils pas censés être changeants? Et si vous faites toujours référence avec la variable d'environnement, tout va bien.
Nate-Wilkins le
22

Vous pouvez obtenir le chemin UserProfile avec juste ceci:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

Zionyx
la source
11

Également très utile, lors de l'examen de l' Environment.SpecialFolderénumération. Utilisez LINQPad ou créez une solution et exécutez ce code:

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

Chemins de dossier

Voici le résultat sur ma machine:

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 

("fisch" correspond aux 5 premières lettres de mon nom de famille. Il s'agit du nom d'utilisateur attribué lors de la connexion avec un compte Microsoft.)

bytecode77
la source
Je ne sais pas comment je n'ai jamais entendu parler de LINQPad, je l'ai essayé, cette chose est géniale, merci de l'avoir recommandé.
TravisO
4
Environment.GetEnvironmentVariable("userprofile")

Essayer de naviguer à partir d'un SpecialFolder nommé est sujet à des problèmes. Il y a de nombreuses raisons pour lesquelles les dossiers ne seront pas là où vous les attendez - les utilisateurs peuvent les déplacer eux-mêmes, GPO peut les déplacer, redirection de dossier vers des chemins UNC, etc.

L'utilisation de la variable d'environnement pour le profil utilisateur doit refléter l'un de ces problèmes possibles.

Scott Ivey
la source
3

Essayer:

System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/
Jay Riggs
la source
1
Cela ne fonctionnera pas sous Windows 7, et je suppose que cela ne fonctionnera pas non plus sur Vista si je me souviens bien de la structure des dossiers. Le 7, vous devrez remonter de 2 dossiers parents puisque le dossier ApplicationData est \% userprofile% \ AppData \ Roaming \
Scott Ivey
Cela renvoie "C: \ Users \ Fredrik \ AppData" sur ma machine Vista (le dossier ApplicationData est "C: \ Users \ Fredrik \ AppData \ Roaming")
Fredrik Mörk
-3
$env:USERPROFILE = "C:\\Documents and Settings\\[USER]\\"
Jeff
la source
Jetez un œil aux commentaires sur la question. Ce n'est pas le cas pour toutes les versions de Windows.
Wai Ha Lee
-3

vous pouvez utiliser le code suivant:

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

Pour plus d'informations, voir: Obtenir le chemin du répertoire actuel dans WinXP et WinCE avec C #

ksblog
la source
3
C'est complètement déplacé ici. L'OP demande le dossier utilisateur actuel , pas le dossier de travail.
julealgon