Miks on failid vajalikud?
Kui programm suletakse, kaovad kõik muutujates hoitud andmed. Failid võimaldavad andmeid püsivalt salvestada — need jäävad alles ka pärast programmi sulgemist. Faile kasutatakse näiteks kasutajate andmete, mängu tulemuste, seadete ja logide salvestamiseks.
C#-s kasutatakse failide lugemiseks ja kirjutamiseks peamiselt StreamReader-it ja StreamWriter-it. Mõlemad asuvad System.IO nimeruumis.
StreamWriter — faili kirjutamine
StreamWriter loob uue faili või kirjutab olemasoleva faili üle.
using System.IO;
// Loome faili ja kirjutame sinna
StreamWriter kirjutaja = new StreamWriter("andmed.txt");
kirjutaja.WriteLine("Tere, fail!");
kirjutaja.WriteLine("See on teine rida.");
kirjutaja.WriteLine("Kolmas rida.");
kirjutaja.Close(); // OLULINE: fail tuleb alati sulgeda!
Console.WriteLine("Andmed salvestatud!");

Faili lõppu lisamine (append)
Vaikimisi kirjutab StreamWriter faili sisu üle. Kui tahad olemasolevale failile juurde lisada, kasuta teist parameetrit true:
// true = lisame lõppu, ei kirjuta üle
StreamWriter kirjutaja = new StreamWriter("andmed.txt", true);
kirjutaja.WriteLine("See rida lisatakse faili lõppu.");
kirjutaja.Close();
StreamReader — faili lugemine
StreamReader loeb tekstifailist ridu ükshaaval.
using System.IO;
// Loeme faili rida realt
StreamReader lugeja = new StreamReader("andmed.txt");
string rida;
while ((rida = lugeja.ReadLine()) != null) // null = fail on lõppenud
{
Console.WriteLine("Loetud: " + rida);
}
lugeja.Close(); // OLULINE: fail tuleb alati sulgeda!
using-plokk — parem viis failide kasutamiseks
using-plokk sulgeb faili automaatselt, isegi kui tekib viga. See on turvalisem viis failidega töötamiseks:
// Kirjutamine using-plokiga
using (StreamWriter kirjutaja = new StreamWriter("tulemus.txt"))
{
kirjutaja.WriteLine("Andmed salvestatud automaatselt.");
} // fail suletakse automaatselt siin
// Lugemine using-plokiga
using (StreamReader lugeja = new StreamReader("tulemus.txt"))
{
string sisu = lugeja.ReadToEnd(); // loeb kogu faili korraga
Console.WriteLine(sisu);
}
Täielik koodinäide
using System;
using System.IO;
class Program
{
static void Main()
{
string failiNimi = "hinded.txt";
// Salvestame hinded faili
Console.WriteLine("=== Hinnete salvestamine ===");
using (StreamWriter kirjutaja = new StreamWriter(failiNimi))
{
for (int i = 1; i <= 3; i++)
{
Console.Write($"Sisesta {i}. aine nimi: ");
string aine = Console.ReadLine();
Console.Write($"Sisesta {i}. aine hinne: ");
string hinne = Console.ReadLine();
kirjutaja.WriteLine($"{aine}: {hinne}");
}
}
Console.WriteLine("\nHinded salvestatud!\n");
// Loeme hinded failist
Console.WriteLine("=== Salvestatud hinded ===");
using (StreamReader lugeja = new StreamReader(failiNimi))
{
string rida;
while ((rida = lugeja.ReadLine()) != null)
{
Console.WriteLine(rida);
}
}
}
}
