dum | žák

Programování C#

Název školy Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace
Adresa školky Kostelní 134, 411 08 Štětí
46773509
Název operačního programu OP Vzdělávání pro konkurenceschopnost
Registrační číslo CZ.1.07/1.5.00/34.1006
Označení vzdělávacího materiálu
Název tématické oblasti (sady) Programování
Název materiálu Práce se soubory
Anotace
Autor Jazyk
Očekávaný výstup
Klíčová slova
Druh výukového zdroje Věková skupina žáků
Typ interakce Ročník
Speciální vzdělávací potřeby žádné
Zhotoveno, (datum/období) Celková velikost

pdf icon
Soubory

Obsah

Textové soubory

C# nabízí třídu System.IO.File, se kterou lze celkem pohodlně pracovat s textovými soubory. Tyto ovšem musí být zakódovány v UTF-8.

Textové soubory jsou obyčejné soubory, které obsahují pouze text, tj. žádné formátování (jako např. soubory typu ODT nebo DOCX).

Snad každý editor dnes již podporuje alespoň UTF-8. Pokud nikde nevidíte možnost tohoto nastavení, je možné, že tak dělá nativně, a nebo využívá tzv. systémové locales (typicky Linux).

Použití třídy File

Pro běžné používání je vhodné nastavit použití tzv. namespace - System.IO před deklaraci hlavní třídy, hned po řádku using Sytem;. Jde o to, že třída File se nachází v jiném namespace, než tom ve kterém jsme a nebo, který již používáme.

Zapíšeme-li řádek using System.IO; pod již existující příkaz use, pak můžeme v našem kódu psát "zkráceně" pouze název File. V opačném případě bychom museli psát vždy celou cestu, tj. System.IO.File.

Příprava

Vytvořme si textový soubor (notepad, gedit) do něhož napišme větu: Příliš žluťoučký kůň úpěl ďábelské ódy.

Soubor uložme do adresáře projektu, konkrétně podadresáře bin/debug/, pod názvem pokus.txt.

Test existence souboru

Nyní zjistíme, zda-li soubor existuje. Tuto rutinu je vhodné provádět vždy, aby nedošlo ke zbytečným výjimkám, které zatím neumíme ošetřovat.

Test existence lze provést metodou File.Exists(). Tato metoda přepírá jeden vstupní parametr - string path, což je cesta k souboru. Náš soubor se nachází ve stejném adresáři, jako zkompilovaná binárka (exe), proto není třeba psát žádnou cestou, pouze název souboru.

Metoda vrací typ bool, který nabývá hodnoty true v případě, že soubor existuje. Jinak je vrácen false.

if (File.Exists("pokus.txt")) {
	Console.WriteLine("Soubor nalezen.");
else {
	Console.WriteLine("Soubor neexistuje!!!");
}
 
Čtení ze souboru

Metoda File.ReadAllText() načte obsah souboru do paměti a vrátí jej jako string. Jako vstupní parametr je zde opět cesta k souboru.

if (File.Exists("pokus.txt")) {
	Console.WriteLine("Soubor nalezen.");
 
	// načtení dat ze souboru
	string data = File.ReadAllText("pokus.txt");
	Console.WriteLine(data);
}
else {
	Console.WriteLine("Soubor neexistuje!!!");
}
 

Po vypsání obsahu souboru (proměnná data) ihned uvidíme, zda-li je soubor uložen v UTF-8, protože C# automaticky předpokládá toto kódování a bude-li tomu jinak, dočkáte se různých artefaktů.

Přidání obsahu

Do souboru lze přidat další text metodou File.AppendAllText(). Její použití je stejně přímočaré jako v předchozích případech. Navíc, pokud soubor neexistuje, tak se vytvoří.

Metoda ovšem nevrací žádnou hodnotu (void) a přebírá dva vstupní parametry. První již známe. Druhý - string contents je právě text, který se bude přidávat na konec souboru.

Rozšiřme tedy náš kód o tuto metodu, kde do souboru přidáme jeden řádek textu (zakonečeným znakem pro konec řádku, zde "\n").

if (File.Exists("pokus.txt")) {
	Console.WriteLine("Soubor nalezen.");
 
	// načtení dat ze souboru
	string data = File.ReadAllText("pokus.txt");
	Console.WriteLine(data);
 
	// zápis do souboru (na jeho konec)
	File.AppendAllText("pokus.txt", "Další žluťoučký kůň\n");
else {
	Console.WriteLine("Soubor neexistuje!!!");
}
 
Přepsání souboru

Metoda File.WriteAllText() slouží k přepsání celého souboru novým obsahem. Pokud soubor obsahuje nějaký text, bude nenávratně ztracen. A stejně jako u AppendAllText(), pokud soubor neexistuje, tak se vytvoří.

File.WriteAllText("pokus.txt", "Jediný žluťoučký kůň\n");