En utilisant ceci:
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
Je reçois 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]\\"
Peut-être que ce sera une bonne solution: prendre 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.
Essayer:
System.Environment.GetEnvironmentVariable("USERPROFILE");
Modifier:
Si la version de .NET que vous utilisez est une version 4 ou supérieure, vous pouvez utiliser le fichier Environment.SpecialFolder
énumération:
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
Vous pouvez obtenir le chemin UserProfile avec juste ceci:
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
Aussi très utile, tout en enquêtant sur le Environment.SpecialFolder
enum. 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())
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
Btw. "fisch" correspond aux 5 premières lettres de mon nom de famille (et signifie "poisson" en allemand). C'est le nom d'utilisateur attribué lors de la connexion à un compte Microsoft.
Environment.GetEnvironmentVariable("userprofile")
Tenter de naviguer à partir d'un dossier spécial nommé est sujet à des problèmes. Il existe 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, la redirection de dossiers vers des chemins UNC, etc.
L'utilisation de variable d'environnement pour le profil utilisateur devrait refléter l'un de ces problèmes possibles.
Essayer:
System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/
Il n'est jamais bon de perdre son temps avec des variables d'environnement ou des décalages de dossier parent codés en dur lorsqu'il existe une API pour obtenir les informations souhaitées, appelez SHGetSpecialFolderPath(...,CSIDL_PROFILE,...)