A Windows rendszer igen érdekes felépÃtésű mappák tekintetében. Sok mindennek speciális mappája van, amik a rendszeren belül egy megadott minta alapján bizonyos mappákban tárolódnak. Ezeknek az elérési útvonalát beégetni egy szövegként nem lehetséges a programunkba, megtanulni az elérési útvonalak létrehozásához szükséges szabályokat felesleges, mivel van erre Osztály és metódus.
Az osztály, ami nekünk erre a célra kell, az Environment nevet viseli. Ennek segÃtségével számos információt tudunk lekérdezni a keretrendszerrÅ‘l és az operációs rendszerrÅ‘l. A lekérdezhetÅ‘ információk között megtalálható:
- A futtató CLR verziója
public static Version Version { get; }
- A program indÃtási parancssora
public static string CommandLine { get; }
- A futtató gép neve
public static string MachineName { get; }
- Az operációs rendszer neve és verziója
public static OperatingSystem OSVersion { get; }
- A programot futtató felhasználó neve
public static string UserName { get; }
- A program indÃtási mappája
public static string CurrentDirectory { get; set; }
- A processzor magok száma
public static int ProcessorCount { get; }
- Az operációs rendszer és az aktuális folyamat 64 bitességről információk
public static bool Is64BitOperatingSystem { get; }
public static bool Is64BitProcess { get; }
Ezen tulajdonságok lekérdezésére egy gyors rendszer-információs program:
using System;
namespace PeldaEnvironment
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("CLR: {0}", Environment.Version);
Console.WriteLine("64 bites os: {0}", Environment.Is64BitOperatingSystem);
Console.WriteLine("64 bites process: {0}", Environment.Is64BitProcess);
Console.WriteLine("Gépnév: {0}", Environment.MachineName);
Console.WriteLine("OS: {0}", Environment.OSVersion);
Console.WriteLine("User: {0}", Environment.UserName);
Console.WriteLine("Mappa: {0}", Environment.CurrentDirectory);
Console.WriteLine("Parancssor: {0}", Environment.CommandLine);
Console.WriteLine("CPU szam: {0}", Environment.ProcessorCount);
Console.ReadKey();
}
}
}
A program egy lehetséges kimenete:
CLR: 4.0.30319.42000
64 bites os: True
64 bites process: False
Gépnév: DESKTOP-ASD123
OS: Microsoft Windows NT 6.2.9200.0
User: UserName
Mappa: e:\csharpkonyv\konyv-peldakodok\Peldak\bin\Debug
Parancssor: "e:\csharpkonyv\konyv-peldakodok\Peldak\bin\Debug\pelda_environment.exe"
CPU szam: 12
Ezen információk mellett a speciális Rendszermappák lekérdezésére is a Environment osztály használható, méghozzá a GetFolderPath() metódussal, aminek paramétere a Environment.SpecialFolder tÃpusú felsorolás egy értéke. Ezen felsorolás tartalmazza az összes speciális mappa elérési útvonalát.
public static string GetFolderPath (Environment.SpecialFolder folder);
A metódus visszatérési értéke a mappa útvonala lesz a lemezen vagy üres szöveg. Üres szöveget a virtuális mappák (pl. Sajátgép) értékéhez kapunk. Az alábbi példaprogram lekérdezi az összes speciális mappa nevét és értékét:
using System;
namespace PeldaEnvironment2
{
class Program
{
static void Main(string[] args)
{
var specials = (Environment.SpecialFolder[])Enum.GetValues(typeof(Environment.SpecialFolder));
foreach (var special in specials)
{
Console.WriteLine("Environment.{0} - {1}", special, Environment.GetFolderPath(special));
}
Console.ReadKey();
}
}
}
A definiált környezeti változók lekérdezésére is lehetÅ‘ségünk van. Erre a GetEnvironmentVariables() metódus alkalmazható, ami egy IDictionary tÃpusban adja vissza a változók nevét és értékét.1
Ha pedig pontosan tudjuk, hogy melyik változó értékére vagyunk kÃváncsiak, akkor használhatjuk a GetEnvironmentVariable (string variable); metódust, aminek a paramétere a változó neve. A Windows által beépÃtetten definiált változók listája a mellékletek között megtalálható.
Az ExpandEnvironmentVariables() nevű függvény akkor is fel tudja oldani a környezeti változókhoz rendelt értékeket, ha azok a függvény paramétereként megadott szövegen belül helyezkednek el.
using System;
using System.Collections;
namespace PeldaEnvironment3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Környezeti változók: ");
foreach (DictionaryEntry valtozo in Environment.GetEnvironmentVariables())
{
Console.WriteLine("{0} - {1}", valtozo.Key, valtozo.Value);
}
Console.WriteLine("Kevert változó kiértékelve: %windir%\\system32");
Console.WriteLine(Environment.ExpandEnvironmentVariables("%windir%\\system32"));
Console.ReadKey();
}
}
}
Linux és MacOs esetén a GetEnvironmentVariables meghÃvása csak azokat a környezeti változókat adja vissza, amelyek az adott programot futtató felhasználó jogosultságaival elérhetÅ‘ek.
-
Ez a metódus még a .NET 1.0 idején született, ami nem rendelkezett generikus támogatással, ezért a metódus által visszaadott
IDictionarykulcsai és értékei isobjecttÃpusúak, amiket konvertálnunk kell szövegre.↩