Okay, ich habe Environment.SpecialFolder überprüft, aber dafür ist nichts drin.
Ich möchte das Home-Verzeichnis des aktuellen Benutzers in C # erhalten. (zB c:\documents and settings\user
unter XP, c:\users\user
unter Vista und /home/user
unter Unix.)
Ich weiß, dass ich Umgebungsvariablen lesen kann, um dies herauszufinden, aber ich möchte dies plattformübergreifend tun.
Gibt es eine Möglichkeit, dies mit .NET zu tun (vorzugsweise mit mscorlib)?
UPDATE : Okay, das ist der Code, den ich letztendlich verwendet habe:
string homePath = (Environment.OSVersion.Platform == PlatformID.Unix ||
Environment.OSVersion.Platform == PlatformID.MacOSX)
? Environment.GetEnvironmentVariable("HOME")
: Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
Antworten:
Environment.SpecialFolder.Personal
Gibt den Home-Ordner nicht zurück, sondern den Ordner Eigene Dateien. Der sicherste Weg, um den Home-Ordner unter Win32 zu erhalten, ist das Lesen%HOMEDRIVE%%HOMEPATH%
. Das Lesen von Umgebungsvariablen ist tatsächlich sehr portabel (unter Unix und Windows), daher bin ich mir nicht sicher, warum das Poster dies nicht tun wollte.Bearbeitet, um hinzuzufügen: Für plattformübergreifendes (Windows / Unix) C # habe ich
$HOME
unter Unix und OSX sowie%HOMEDRIVE%%HOMEPATH%
unter Windows gelesen .quelle
Persönlich ist Eigene Dateien (oder Dokumente in Win7 und höher).
quelle
Ich glaube, was Sie suchen, ist:
Als Referenz ist es in enthalten
mscorlib
.quelle
In DotNetCore 1.1
System.Environment.SpecialFolder
existiert nicht. Es könnte in 2.0-Beta existieren. Bis dahin können Sie dazu Folgendes verwenden:quelle
System.Environment.SpecialFolder
existiertDie Antwort lautet unter dem Strich Nein. Dies ist keine einfache systembasierte Methode in .NET, um das Home-Verzeichnis so abzurufen, dass wir eine Implementierung sowohl in .NET unter Windows als auch in Mono erwarten können.
Sie müssen eine Betriebssystemerkennung durchführen und zu betriebssystemspezifischem Code verzweigen.
quelle
Welche anderen Betriebssysteme müssen Sie unterstützen, wenn Sie plattformübergreifend sagen? Möglicherweise müssen Sie eine einfache Betriebssystemerkennung durchführen, um die Methode zum Suchen des Basisverzeichnisses auszuwählen, wenn Sie unter einem Nicht-Windows-Betriebssystem ausgeführt werden.
Diese Website scheint eine Möglichkeit zu bieten, das zu tun, was Sie in Windows benötigen.
quelle
Dies kann unter Verwendung von
GetEnvironmentVariable
inSystem.IO
:Dann produziert es unter Windows:
C:\\\\Users\\myusername\\myFolder
Beachten Sie, dass, wenn Sie verwenden
es schlägt fehl, weil es produziert:
\\Users\\myusername\\myFolder
quelle
Ich habe keine Maschine zum Testen,
%HOMESHARE%
könnte aber für Sie arbeiten. Ansonsten ist hier eine ziemlich gute Liste von Umgebungsvariablen .quelle