Soubory
Druhy souborů textové nestrukturované txt strukturované - ini, xml, csv binární veřejné bmp, jpg, wav proprietární docx, cdr, psd
Základy zápisu using System.IO; nutné pro odkázání na jmenný prostor, obsahující třídy určené pro práci se soubory Fáze zápisu: 1. otevření souboru pro zápis (ev. vytvoření) vyšle se požadavek OS o zpřístupnění (ověří se práva) a zamknutí vůči jiným programům 2. zapsání dat vlastní zápis hodnot 3. zavření souboru uvolnění zámku, vyprázdnění vyrovnávací paměti
zápis se provádí pomocí třídy instance StreamWriter metody Write zápis bez odřádkování WriteLine zápis a odskok na nový řádek Close zavření souboru
private void tlačítkozapiš_click(object sender, EventArgs e) // 1.KROK: Otevření souboru pro zápis (vytvoření) string jménosouboru = "první pokus.txt"; StreamWriter soubor = new StreamWriter(jménoSouboru); // 2.KROK: Manipulace - vlastní zápis // první část prvního řádku soubor.write("příliš žluťoučký kůň "); // druhá část prvního řádku string řetězec = "úpěl ďábelské ódy."; soubor.writeline(řetězec); // druhý řádek soubor.writeline("nádhera poslouchat..."); // 3.KROK: Zavření souboru soubor.close(); } // Hlášení pro uživatele MessageBox.Show("HOTOVO!");
Volba kódování instance třídy Encoding, které se zadávají jako statické vlastnosti (př. Encoding.UTF8) nebo jako výsledky volání metody GetEncoding, které se předává parametr s číslem kódové stránky (př. Encoding.GetEncoding(1250)) konstruktor StreamWriter soubor = new StreamWriter(jménoSouboru, false, kódování); prostřední parametr append typu bool udává, zda v případě existujícího souboru přidat obsah na konec (true) nebo soubor přepsat (false) Okno pro výběr souboru SaveFileDialog přímo v designéru Visual Studia zobrazení zavoláním metody ShowDialog() vrací odpověď DialogResult podle stisknutého tlačítka jméno souboru je ve vlastnosti FileName
private void tlačítkozapiš_click(object sender, EventArgs e) // Zjištění informací o souboru string jménosouboru = polejménosouboru.text; Encoding kódování; if (knoflíkcp1250.checked) kódování = Encoding.GetEncoding(1250); else if (knoflíkcp852.checked) kódování = Encoding.GetEncoding(852); else if (knoflíklatin2.checked) kódování = Encoding.GetEncoding(28592); else if (knoflíkutf8.checked) kódování = Encoding.UTF8; else if (knoflíkutf16le.checked) kódování = Encoding.Unicode; else kódování = Encoding.BigEndianUnicode; // Otevření souboru StreamWriter soubor = new StreamWriter(jménoSouboru, false, kódování); // Zápis jednotlivými příkazy soubor.write("příliš žluťoučký kůň "); soubor.writeline("úpěl ďábelské ódy"); // Zápis pomocí cyklu for (int číslo = 1; číslo <= 5; číslo++) int desetinásobek = 10*číslo; string řádek = "Desetinásobkem čísla " + číslo.tostring() + " je číslo " + desetinásobek.tostring(); soubor.writeline(řádek); } // Zavření souboru soubor.close(); } MessageBox.Show("HOTOVO!"); private void tlačítkoprocházet_click(object sender, EventArgs e) DialogResult odpověď = oknouloženísouboru.showdialog(); if (odpověď == DialogResult.OK) polejménosouboru.text = oknouloženísouboru.filename;
Základy čtení analogicky k zápisu: StreamReader (jen parametr jméno souboru aut. UTF8, nebo jméno a kódování), ReadLine, OpenFileDialog private void tlačítkopřečti_click(object sender, EventArgs e) // Zjištění informací o souboru string jménosouboru = polejménosouboru.text; Encoding kódování; if (knoflíkcp1250.checked) kódování = Encoding.GetEncoding(1250); else if (knoflíkcp852.checked) kódování = Encoding.GetEncoding(852); else if (knoflíklatin2.checked) kódování = Encoding.GetEncoding(28592); else if (knoflíkutf8.checked) kódování = Encoding.UTF8; else if (knoflíkutf16le.checked) kódování = Encoding.Unicode; else kódování = Encoding.BigEndianUnicode; // 1.KROK: Otevření souboru StreamReader soubor = new StreamReader(jménoSouboru, kódování); } // 2.KROK: Vlastní čtení string řádek1 = soubor.readline(); string řádek2 = soubor.readline(); string řádek3 = soubor.readline(); // 3.KROK: Zavření souboru soubor.close(); // Zobrazení přečtených řádků string zpráva = řádek1 + Environment.NewLine + řádek2 + Environment.NewLine + řádek3; MessageBox.Show(zpráva); private void tlačítkoprocházet_click(object sender, EventArgs e) DialogResult odpověď = oknootevřenísouboru.showdialog(); if (odpověď == DialogResult.OK) polejménosouboru.text = oknootevřenísouboru.filename; }
Čtení celého souboru pomocí do-while // 2.KROK: Vlastní čtení a zobrazení v textovém poli string řádek, celýtext = null; do } řádek = soubor.readline(); if (řádek!= null) celýtext += řádek + Environment.NewLine; while (řádek!= null); poleobsah.text = celýtext; pomocí while // 2.KROK: Vlastní čtení a zobrazení v textovém poli string řádek, celýtext = null; while ((řádek = soubor.readline())!= null) celýtext += řádek + Environment.NewLine; poleobsah.text = celýtext;
Př. program, co načte textový soubor, převede ho na velká písmena a uloží pod novým názvem tip. metoda ToUpper() třídy string případné problémy s načtením nebo uložením ošetřete pomocí try-catch
Př. program, který z textového souboru, kde je na každém řádku jedno číslo, tato čísla načte a sečte. Pokud je obsah souboru chybný, napíše, že součet nelze provést. Program, který zobrazí datum slovy. Slova má uložena v souborech ze složky http://www.gfp.cz/prg/datum_slovy/
Př. program, který zobrazí posledních 10 řádků textového souboru Př. program, který spojí střídavě po řádcích dva soubory do jednoho, tj. první soubor bude tvořit liché řádky výsledného, druhý sudé.
Formátování řetězců - metoda Format třídy String - http://msdn.microsoft.com/cs-cz/library/system.string.format%28v=vs.110%29.aspx - dole See Also formátovací řetězce pro čísla, data atd. // Základní použití int početlidí = 12, početaut = 5; string zpráva = string.format( "Na firemní akci přijelo 0} lidí a 1} aut", početlidí, početaut); polezobrazení.text = zpráva + Environment.NewLine + Environment.NewLine; // Formátování spolu se zarovnáním string[] jména = new string[] "Černý Jindřich", "Zelený Marcel", "Kaštanová Květoslava"}; double[] podíly = new double[] 101.0 / 201, 20.0 / 201, 80.0 / 201}; polezobrazení.text += "Podíly ve společnosti:" + Environment.NewLine; polezobrazení.text += string.format("0,-22} 1,5}", "Jméno", "Podíl") + Environment.NewLine; for (int i = 0; i < jména.length; i++) zpráva = string.format("0,-22} 1,5:P1}", jména[i], podíly[i]); polezobrazení.text += zpráva + Environment.NewLine; } Na procenta, 1 des. místo Na 5 znaků doprava Na 22 znaků doleva
Je potřeba použít neproporcionální písma jako Courier New, Lucida Console apod. Stejným způsobem lze formátovat při zápisu do textových souborů pomocí Write a WriteLine. Př. napište program, který načte textový soubor a zcenzuruje (nahradí hvězdičkami) slova ze seznamu v souboru cenzura.txt. Tip: metoda Replace volaná na textový řádek
Př. program, který vyhodnotí platy zaměstnanců ze souboru ve složce http://www.gfp.cz/prg/platy/
Program, který zjistí, zda je slovo nebo věta palindrom. Mezery a interpunkci ignorujte.
private void tlačítkozjisti_click(object sender, EventArgs e) // Odstraň mezery, převeď na malá písmena string věta = polezkoumanéslovověta.text; string zleva = věta.tolower().replace(" ", null); // Převeď na pole, převrať a převeď zpět na string char[] veznacích = zleva.tochararray(); Array.Reverse(veZnacích); string zprava = new string(veznacích); } // Vyhodnoť if (zleva == zprava) MessageBox.Show("PALINDROM!"); else MessageBox.Show("Nejedná se o palindrom");
Třída Path prozkoumejte sami, jak to funguje private void tlačítkoprocházet_click(object sender, EventArgs e) if (oknootevřenísouboru.showdialog() == DialogResult.OK) polejménovýchozího.text = oknootevřenísouboru.filename; } private void tlačítkonajdi_click(object sender, EventArgs e) } string jménovýchozího = polejménovýchozího.text; string složka = Path.GetDirectoryName(jménoVýchozího); string jménobezpřípony = Path.GetFileNameWithoutExtension(jménoVýchozího); string přípona = Path.GetExtension(jménoVýchozího); string novéjméno = jménobezpřípony + " (VÝBĚR)" + přípona; string jménovýsledného = Path.Combine(složka, novéjméno); polejménovýsledného.text = jménovýsledného;
Výběr více souborů Dialogové okno pro výběr souborů umožňuje vybrat souborů víc (tažením myší nebo s pomocí Ctrl a Shift). Aby to fungovalo, musí se nastavit vlastnost MultiSelect na True. Výsledek je v poli string[] FileNames dialogového okna. Př. program, který zobrazí názvy vybraných souborů uživatelem.
Př. program, který udělá slideshow z obrázků v zadané složce.