D'accord, j'ai vérifié Environment.SpecialFolder, mais il n'y a rien là-dedans pour cela.
Je veux obtenir le répertoire personnel de l'utilisateur actuel en C #. (par exemple c:\documents and settings\user
sous XP, c:\users\user
sous Vista et /home/user
sous Unix.)
Je sais que je peux lire les variables d'environnement pour le découvrir, mais je veux le faire de manière multiplateforme.
Est-il possible que je puisse faire cela avec .NET (de préférence en utilisant mscorlib)?
MISE À JOUR : D'accord, c'est le code que j'ai fini par utiliser:
string homePath = (Environment.OSVersion.Platform == PlatformID.Unix ||
Environment.OSVersion.Platform == PlatformID.MacOSX)
? Environment.GetEnvironmentVariable("HOME")
: Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
Réponses:
Environment.SpecialFolder.Personal
ne renvoie pas réellement le dossier de départ, il renvoie le dossier Mes documents . Le moyen le plus sûr d'obtenir le dossier de départ sur Win32 est de le lire%HOMEDRIVE%%HOMEPATH%
. La lecture des variables d'environnement est en fait très portable à faire (sous Unix et Windows), donc je ne sais pas pourquoi l'affiche a voulu ne pas le faire.Édité pour ajouter: Pour le C # crossplatform (Windows / Unix), j'avais lu
$HOME
sur Unix et OSX et%HOMEDRIVE%%HOMEPATH%
sur Windows.la source
Personnel est Mes Documents (ou Documents dans win7 et au-dessus).
la source
Je crois que ce que vous recherchez est:
Pour référence, il est en fait contenu dans
mscorlib
.la source
Dans DotNetCore 1.1
System.Environment.SpecialFolder
n'existe pas. Il peut exister en version 2.0-beta. Jusque-là, pour ce faire, vous pouvez utiliser les éléments suivants:la source
System.Environment.SpecialFolder
existeLa réponse est non. Il n'y a pas de méthode simple basée sur le système dans .NET pour obtenir le répertoire Home de telle sorte que nous pourrions nous attendre à une implémentation à la fois dans .NET sous Windows et en Mono.
Vous devrez effectuer une détection du système d'exploitation et passer au code spécifique du système d'exploitation.
la source
Quand vous parlez de manière multiplateforme, quels autres systèmes d'exploitation devez-vous prendre en charge? Vous devrez peut-être effectuer une détection simple du système d'exploitation pour sélectionner la méthode de recherche du répertoire de base si vous exécutez sur un système d'exploitation non Windows.
Ce site Web semble offrir un moyen de faire ce dont vous avez besoin dans Windows.
la source
Cela peut être fait en utilisant
GetEnvironmentVariable
dansSystem.IO
:Ensuite, il produit sous windows:
C:\\\\Users\\myusername\\myFolder
Notez que si vous utilisez
il échoue car il produit:
\\Users\\myusername\\myFolder
la source
Je n'ai pas de machine pour le tester, mais cela
%HOMESHARE%
pourrait fonctionner pour vous. Sinon, voici une assez bonne liste de variables d'environnement .la source