Indítsuk el a Visual Studio Community-t, és hozzunk létre egy Console alkalmazást (1. ábra).
1. ábra Console projekt létrehozása
Másoljuk be a következő programot a Progam.cs file-ba, a namespace blokkba.
class Program
{
static void Main(string[] args)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();foreach (var d in allDrives)
{
Console.WriteLine(d.Name + "\t" + d.DriveType +
"\t" + d.RootDirectory + "\t" + d.IsReady);
}Console.ReadLine();
}
}
A DriveInfo osztályt tartalmazó szerelvény egy "alap" Console alkalmazásnál nem került megadásra, ezért ezt nekünk utólag kell felvennünk (2. ábra). Álljunk rá a DriveInfo szóra a kurzorral, majd kattintsunk a lámpa ikonra, vagy nyomjunk CTRL+pont-ot.
2. ábra A System.IO szerelvény felvétele a projektbe
A programunk visszaadja a GetDrives() metódussal a létező partíciókat, amelyeket eltárolunk az allDrives tömbbe. A foreach ciklus segítségével ezt a tömböt (gyűjtemény) bejárjuk, és megjelenítjük a Console osztály WriteLine() metódusával a partíciók különböző tulajdonságait (3. ábra).
3. ábra A megjelenített partíciók
Nem minden tulajdonságot tudunk megjeleníteni, mert vannak olyan tulajdonságok (pl.: szabad tárhely), amelyek a CDRom-ná nem értelmezhetők. Ezért a programunkat módosítani kell, vagy kivételdobást kell lekezelnünk a try-catch blokkal, vagy alkalmaznunk kell az IsReady tulajdonságot, amely logikai false-t ad vissza például a CDRom-ra. Ha az IsReady tulajdonság értéke True, akkor a feltételes szerkezet kiértékelésre kerül, és meg tudjuk jeleníteni a különböző meghajtók további tulajdonságait is, például a cimkét, illetve a meghajtó maximális méretét byte-ban.
class Program
{
static void Main(string[] args)
{
DriveInfo[] allDrives = DriveInfo.GetDrives();foreach (var d in allDrives)
{
if (d.IsReady)
{
Console.WriteLine(d.Name + "\t" + d.DriveType +
"\t" + d.RootDirectory + "\t" + d.AvailableFreeSpace+
"\t"+d.DriveFormat+"\t"+d.VolumeLabel + "\t"+d.TotalSize);
}
}Console.ReadLine();
}
}
A módosított programunk futási eredményét mutatja a 4. ábra, ahol már a CDRom-ot nem találjuk.
4. ábra Futási eredmény plusz tulajdonságokkal
Nézzük most meg részletesebben a "C:" meghajtót, listázzuk ki az összes könyvtárnak a nevét, amely a "root"-ban van. Ehhez másoljuk be a Program.cs file-ba a következő programot.
class Program
{
static void Main(string[] args)
{
DriveInfo part = new DriveInfo("C:");if (part.IsReady)
{
Console.WriteLine("Név" + "\t" + "Formátum" +
"\t" + "Teljes" + "\t" + "Szabad");
Console.WriteLine(part.Name + "\t" + part.DriveFormat +
"\t" + part.TotalSize + "\t" + part.TotalFreeSpace);
Console.WriteLine(part.VolumeLabel);string[] dirs = Directory.GetDirectories("C:");
foreach (var dirName in dirs)
Console.WriteLine(dirName);
}Console.ReadLine();
}
}
A DriveInfo példányasításakor (part) az osztály konstruktorának átadjuk a "C:" paramétert, majd a létrehozott példány IsReady tulajdonságát megnézzük, hogy az értéke True-e, azaz, minden tulajdonságát le tudjuk-e kérdezni (mondjuk, a "C:"-nél ez felesleges, hiszen ezen a meghajtón van az operációs rendszer). A feltételes szerkezetben a meghajtó néhány tulajdonságát kiírjuk a konzolra.
Ezután létrehozunk dirs néven egy tömböt, amelyben eltároljuk a GetDirectories() metódussal a "C:" meghajtón található könyvtárak neveit. Ezután ezt a tömböt bejárjuk a foreach ciklussal, és a könyvtárak neveit megjelenítjük a konzol ablakban (5. ábra).
5. ábra A "C:" meghajtó könyvtárai
"Nézzünk" most bele az egyik könyvtárba, például a "Program Files"-ba. Módosítsuk az előző programunkat a következő kód szerint.
class Program
{
static void Main(string[] args)
{
string[] dirs = Directory.GetDirectories("C:\\Program Files");
foreach (var dirName in dirs)
Console.WriteLine(dirName);Console.ReadLine();
}
}
Noha ez a program teljesen jó, sajnos akadhat gond, ugyanis ebben a könyvtárban található olyan alkönyvtár, amelyhez a hozzáférés tiltott. Ezért kivételdobást kapunk, amelyet a Visual Studio kap el (6. ábra).
6. ábra A Visual Studio által elkapott kivétel
A kivételdobás a GetDriectories() metódusnál történt, ezért ezt a sort (illetve a foreach-ot is a dirSub létrehozása miatt) tegyük be egy try blokkba. A catch blokkban jelenítsük meg a kivételt (ex) string-ként. Ehhez a ToString() metódust alkalmaztuk. Ezek láthatók a következő programban.
class Program
{
static void Main(string[] args)
{
string[] dirs = Directory.GetDirectories("C:\\Program Files");
foreach (var dirName in dirs)
{
Console.WriteLine(dirName);try
{
string[] dirSub = Directory.GetDirectories(dirName);
foreach (var item in dirSub)
{
Console.WriteLine(item);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
Console.ReadLine();
}
}
Futtassuk újra az alkalmazásunkat. Látjuk, hogy a "WindowsApps" könyvtárnál kivételdobás történt (7. ábra).
7. ábra Lekezelt kivétel az alkönyvtárak megjelenítésénél
Ebben a cikkben bemutatjuk a metódusok alapjait. Nem érintjük viszont például a túlterhelést, ezt egy következő részben tekintjük át.. . . .
A sorozatunknak ebben a részében átnézzük általánosságban az osztályok alapjait egy konzolalkalmazás segítségével. A konstruktorok viszont a következő részben kerülnek bemutatásra.. . . .
Ebben a cikkben nem csak a metódusok túlterhelését nézzük meg egy konkrét példa segítségével, hanem szóba kerülnek a generikusok is, szintén egy kisebb projekt keretén belül.. . . .