Wie kann ich das aktuelle Benutzerverzeichnis abrufen?

100

Verwenden Sie diese:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Ich bekomme diese Ausgabe:

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

Wie kann ich das Stammverzeichnis aller Benutzer erhalten? dh:

"C:\\Documents and Settings\\[USER]\\"
Juan
quelle
1
Die Antwort , die ich am Ende mit gelöscht wurde ... diese Werke: Path.GetDirectoryName (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData))
juan
2
Juan - das wird bei dir nicht immer funktionieren - diesmal hast du einfach Glück gehabt.
Scott Ivey
warum ist das so? du meinst wie in Vista? oder in xp hört es plötzlich auf zu arbeiten?
Juan
5
siehe Scotts Kommentar zu Jay Riggs 'Antwort. Unter W7 und Vista befindet sich der Ordner "Anwendungsdaten" an einer anderen Stelle, sodass Sie 2 Verzeichnisse im Gegensatz zu 1
Thomas

Antworten:

48

Möglicherweise ist dies eine gute Lösung: Berücksichtigen Sie, ob dies Vista / Win7 oder XP ist und ohne Umgebungsvariablen:

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

Die Verwendung der Umgebungsvariablen ist jedoch viel klarer.

Anton Kolesov
quelle
165

Versuchen:

System.Environment.GetEnvironmentVariable("USERPROFILE");

Bearbeiten:

Wenn die von Ihnen verwendete .NET-Version 4 oder höher ist, können Sie die Environment.SpecialFolderAufzählung verwenden:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
Thomas
quelle
16
Es ist eine wirklich schlechte Idee, sich auf Umgebungsvariablen zu verlassen, um Ihnen die Ordnerpfade zu geben. Es gibt zu viele Möglichkeiten, wie diese Umgebungsvariablen geändert werden können. Der empfohlene Weg ist die Aufzählung von Environment.SpecialFolder.
Jim Mischel
1
Wie Sie unter msdn.microsoft.com/en-us/library/… sehen können, ist der Ordner USERPROFILE leider nicht in dieser Aufzählung enthalten.
Thomas
Der Environment.SpecialFolder ist in .NET 1.1 enthalten, hat nur keinen "UserProfile" -Ordner ...
Vini
@ JimMischel Aber sind die nicht angeblich veränderbar? Und wenn Sie immer auf die Umgebungsvariable verweisen, geht es Ihnen gut.
Nate-Wilkins
22

Sie können den UserProfile-Pfad folgendermaßen abrufen:

Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

Zionyx
quelle
11

Auch sehr hilfreich bei der Untersuchung der Environment.SpecialFolderAufzählung. Verwenden Sie LINQPad oder erstellen Sie eine Lösung und führen Sie diesen Code aus:

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

Ordnerpfade

Dies ist das Ergebnis auf meinem Computer:

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" sind die ersten 5 Buchstaben meines Nachnamens. Dies ist der Benutzername, der bei der Anmeldung mit einem Microsoft-Konto vergeben wird.)

Bytecode77
quelle
Ich weiß nicht, wie ich noch nie von LINQPad gehört habe, habe es ausprobiert, dieses Ding ist großartig, danke, dass du es empfohlen hast.
TravisO
4
Environment.GetEnvironmentVariable("userprofile")

Der Versuch, von einem benannten SpecialFolder nach oben zu navigieren, ist problematisch. Es gibt viele Gründe, warum die Ordner nicht dort sind, wo Sie sie erwarten - Benutzer können sie selbst verschieben, Gruppenrichtlinienobjekt kann sie verschieben, Ordnerumleitung zu UNC-Pfaden usw.

Die Verwendung der Umgebungsvariablen für das Benutzerprofil sollte eines dieser möglichen Probleme widerspiegeln.

Scott Ivey
quelle
3

Versuchen:

System.IO.Directory.GetParent(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)).FullName/
Jay Riggs
quelle
1
Dies funktioniert nicht unter Windows 7, und ich gehe davon aus, dass es auch unter Vista nicht funktioniert, wenn ich mich richtig an die Ordnerstruktur erinnere. Am 7. müssten Sie 2 übergeordnete Ordner hochfahren, da der ApplicationData-Ordner \% userprofile% \ AppData \ Roaming \
Scott Ivey
Das gibt "C: \ Users \ Fredrik \ AppData" auf meinem Vista-Computer zurück (der ApplicationData-Ordner ist "C: \ Users \ Fredrik \ AppData \ Roaming")
Fredrik Mörk
1

Das Herumspielen mit Umgebungsvariablen oder fest codierten Offsets für übergeordnete Ordner ist niemals eine gute Idee, wenn es eine API gibt, mit der Sie die gewünschten Informationen abrufen können SHGetSpecialFolderPath(...,CSIDL_PROFILE,...)

Anders
quelle
-3
$env:USERPROFILE = "C:\\Documents and Settings\\[USER]\\"
Jeff
quelle
Schauen Sie sich die Kommentare zur Frage an. Dies ist nicht bei allen Windows-Versionen der Fall.
Wai Ha Lee
-3

Sie können den folgenden Code verwenden:

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

Weitere Informationen finden Sie unter: Aktuellen Verzeichnispfad in WinXP und WinCE mit C # abrufen

ksblog
quelle
3
Dies ist hier völlig fehl am Platz. Das OP fragt nach dem aktuellen Benutzerordner , nicht nach dem Arbeitsordner.
Julealgon