A C# programozási nyelv

Fájlkezelés

A fájlkezelésért a System.IO névtérben található File alaposztály felel, amely a fájlkezeléshez számos statikus függvényt nyújt (az összes itt található függvény statikus). A fontosabbak:

AppendText Szöveget fűz a fájlhoz.
Copy Új fájlt készít egy meglevő fájl alapján.
Create Új fájlt készít a megadott helyen.
CreateText/td> Új fájlt készít, amely alkalmas szöveg tárolására.
Delete Törli az adott helyen található fájlt. Ennek léteznie kell, különben kivétel váltódik ki.
Exists Meghatározza, hogy adott helyen létezik-e az adott fájl.
GetAttributes Tájékoztat a fájl tulajdonságairól, pl. a fájl tömörített, valójában egy könyvtárat takar, rejtett, csak olvasható, rendszerfájl, ideiglenes, esetleg más különleges fájltípus.
GetCreationTime Megadja a fájl létrehozásának dátumát, idejét.
GetLastAccessTime Megadja a fájl legutóbbi elérésének dátumát, idejét.
GetLastWriteTime Megadja a fájl legutóbbi fájlba írás dátumát, idejét.
Move Lehetővé teszi a fájl áthelyezését, illetve átnevezését.
Open Megnyitja az adott helyen található fájlt. Ezzel írhatunk bele, illetve olvashatunk belőle.
OpenRead Megnyit egy fájlt olvasásra.
OpenText Megnyit egy fájlt, melynek tartalma szövegként értelmezhető.
OpenWrite Megnyit egy megadott fájlt írásra.
SetAttributes Beállítja a megadott fájl tulajdonságait.
SetCreationTime Beállítja a fájl létrehozásának dátumát és idejét.
SetLastAccessTime Beállítja az utolsó elérés dátumát és idejét.
SetLastWriteTime Beállítja az utolsó módosítás dátumát és idejét.

A fájlok adatainak kezeléséért a FileSystemInfo -ból származó System.IO.FileInfo osztály felelős. Fontosabb tulajdonságai:

Attributes A System.IO.FileSystemInfo System.IO.FileAttributes tulajdonságai.
CreationTime A System.IO.FileSystemInfo létrehozási ideje.
CreationTimeUtc A System.IO.FileSystemInfo létrehozási ideje egyezményes koordinált világidőben (UTC) megadva.
Exists (readonly) Megállapítja, hogy létezik-e a fájl.
Extension (readonly) A fájl kiterjesztését adja meg.
FullName (readonly) A fájl teljes elérési útvonalát adja meg.
LastAccessTime A fájlhoz történő utolsó hozzáférés ideje.
LastAccessTimeUtc A fájlhoz történő utolsó hozzáférés ideje egyezményes koordinált világidőben (UTC) megadva.
LastWriteTime A fájl utolsó írásának ideje.
LastWriteTimeUtc A fájl utolsó írásának ideje egyezményes koordinált világidőben (UTC) megadva.
Name (readonly) Megadja a fájl nevét.

A könyvtárak és azok adatainak kezelése a System.IO.Directory és System.IO.DirectoryInfo osztályok segítségével történhet. Speciális metódusai:

GetCurrentDirectory Visszaadja az alkalmazás által használt könyvtárat.
GetDirectories Ennek több túlterhelt változata van. Egy útvonalat megadva le lehet kérni az adott útvonal legbelső könyvtárában található összes könyvtárat. Lehet keresési minta alapján keresni, illetve meg lehet adni, hogy csak az adott könyvtárra vagy az alkönyvtáraira is végezze el a keresést.
GetFiles A GetDirectories metódushoz hasonlóan működik.

Az útvonalak kezelését a System.IO.Path osztály segítségével végezhetjük. Fontosabb metódusai:

GetDirectoryName(string) Visszaadja a könyvtárnevet.
GetExtension(string) Visszaadja a kiterjesztést.
GetFileName(string) Visszaadja a fájlnevet kiterjesztéssel együtt.
GetFileNameWithoutExtension(string) Visszaadja a fájlnevet kiterjesztés nélkül.
GetFullPath(string) Visszaadja az abszolút útvonalat.
HasExtension(string) Megállapítja, hogy az útvonal tartalmaz-e kiterjesztést.
IsPathRooted(string) Megállapítja, hogy az útvonal abszolút vagy relatív.

A fájlmódosítás alaplépései:

Specifikusan a karakteres olvasás alaplépései:

Az írás hasonlóan, csak StreamReader helyett StreamWriter -t, ReadLine() helyett pedig WriteLine() -t kell alkalmazni.

Példa (StreamReader, StreamWriter):

class IOStreams
{
 static void Main()
 {
  //Writing
  StreamWriter sw = new StreamWriter(@"d:\a.txt");
  sw.WriteLine("Hai I am Vineel...");
  sw.WriteLine("This is from C#");
  sw.Close();
  //Reading
  StreamReader sr = new StreamReader(@"d:\a.txt");
  Console.WriteLine(sr.ReadLine());
  Console.WriteLine(sr.ReadLine());
  sr.Close();
 }
}

Példa (FileStream):

class IOStreams
{
 static void Main()
 {
  FileStream fs = new FileStream(@"d:\xyz.exe", FileMode.OpenOrCreate);
  int Size = 1024;
  byte []data = new byte[Size];
  int b = fs.Read(data,0,Size);

  while(b!=0)
  {
   b = fs.Read(data,0,Size);
   //manipulate data here....
  }

  fs.Close();
 }
}

Példa (BinaryReader, BinaryWriter):

class IOStreams
{
 static void Main()
 {
  //Writing
  Stream sin = new FileStream(@"d:\a.txt", FileMode.Create);
  BinaryWriter bw = new BinaryWriter(sin);
  bw.Write(124);
  bw.Write("Vineel");
  bw.Close();
  sin.Close();

  //Reading
  Stream sout = new FileStream(@"d:\a.txt", FileMode.Open);
  BinaryReader br = new BinaryReader(sout);
  Console.WriteLine(br.ReadInt32());
  Console.WriteLine(br.ReadString());
  br.Close();
  sout.Close();
 }
}

Melyik osztályt mikor célszerű használni:

Ehhez még annyit fűznék hozzá, hogy ékezetes betűket és egyéb, nem 8-bites ASCII-karaktereket tartalmazó fájlok esetén érdemes használni a System.Text.Encoding osztályt.

Példa (StreamReader):

StreamReader srFile = new StreamReader(File.OpenRead("valami.txt"), Encoding.Default)

Ez megoldja az ékezetes betűket tartalmazó fájlok beolvasását. A fájlba írásnál ugyanúgy a System.Text.Encoding osztályt kell használni, ha ilyen karaktereket akarunk beleírni.

A System.Text.Encoding osztály képes ASCII, Unicode, UTF32, UTF7, UTF8 kódolást is használni a Default (alapértelmezett) kódoláson kívül, valamint a Convert metódussal az egyes kódolások közötti átváltás is megoldható.