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");