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]\\"

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.


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);

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);


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.)


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.


3

Versuchen:

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

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


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

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


3
Dies ist hier völlig fehl am Platz. Das OP fragt nach dem aktuellen Benutzerordner , nicht nach dem Arbeitsordner.
Julealgon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.