.net path - Comment obtenir et définir les variables d'environnement en C#?




combine getfullpath (6)

Comment puis-je obtenir les variables Environnment et si quelque chose manque, définir la valeur?


Answers

Cela fonctionnera pour une variable d'environnement qui est le paramètre de la machine. Pour les utilisateurs, il suffit de passer à Utilisateur à la place.

String EnvironmentPath = System.Environment
                .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);

Utilisez la classe System.Environment.

La méthode

System.Environment.GetEnvironmentVariable()

et

System.Environment.SetEnvironmentVariable()

fera le travail pour vous.


Je pourrais être en mesure de mettre à jour la variable d'environnement en utilisant ce qui suit

string EnvPath = System.Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine) ?? string.Empty;
if (!string.IsNullOrEmpty(EnvPath) && !EnvPath .EndsWith(";"))
    EnvPath = EnvPath + ';';
EnvPath = EnvPath + @"C:\Test";
Environment.SetEnvironmentVariable("PATH", EnvPath , EnvironmentVariableTarget.Machine);

Obtenir et définir

Obtenir

string getEnv = Environment.GetEnvironmentVariable("envVar");

Ensemble

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);

J'ai couru dans ceci tout en travaillant sur une application de console de .NET pour lire la variable d'environnement de PATH, et ai trouvé que using System.Environment.GetEnvironmentVariable développera automatiquement les variables d'environnement.

Je ne voulais pas que cela se produise ... cela signifie que les dossiers dans le chemin tels que '% SystemRoot% \ system32' étaient réécrits en tant que 'C: \ Windows \ system32'. Pour obtenir le chemin non-développé, j'ai dû utiliser ceci:

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);

A fonctionné à merveille pour moi.


I'm not sure, but I think the string stores its info as an array of Chars, which is inefficient with bytes. Specifically, the definition of a Char is "Represents a Unicode character".

take this example sample:

String str = "asdf éß";
String str2 = "asdf gh";
EncodingInfo[] info =  Encoding.GetEncodings();
foreach (EncodingInfo enc in info)
{
    System.Console.WriteLine(enc.Name + " - " 
      + enc.GetEncoding().GetByteCount(str)
      + enc.GetEncoding().GetByteCount(str2));
}

Take note that the Unicode answer is 14 bytes in both instances, whereas the UTF-8 answer is only 9 bytes for the first, and only 7 for the second.

So if you just want the bytes used by the string, simply use Encoding.Unicode , but it will be inefficient with storage space.





c# .net .net-2.0 environment-variables