loader
Foto

Könyvtárkezelések a C# nyelvben

Készítünk most egy konzolalkalmazást, amelyenek a segítségével megjelenítjük a számítógépünk meghajtóit, majd a C: partíció könyvtárait fogjuk kilistázni.

Indítsuk el a Visual Studio Community-t, és hozzunk létre egy Console alkalmazást (1. ábra).

kep
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.

kep
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).

kep
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.

kep
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).

kep
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).

kep
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).

kep
7. ábra   Lekezelt kivétel az alkönyvtárak megjelenítésénél
 

 



Egyéb cikkek

Mappa

További cikkeink ebben a témakörben

Régebbi cikkeink

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.. . . .