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í | ||
| IČ | 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 | ||
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");

