This article has been localized into Czech by the community.
Čtení a zápis souborů
V této kapitole se podíváme na čtení a psaní jednoduchých souborů s C#. Naštěstí pro nás to C# dělá velmi snadné. Třída Soubor z oboru názvů Syste.IO přichází s téměř vším, co bychom mohli chtít, takže je snadné dělat jednoduché čtení a psaní souboru.
V našem prvním příkladu vytvoříme extrémně minimalistický textový editor. Ve skutečnosti je to tak jednoduché, že můžeme číst pouze jeden soubor a pak do něj psát nový obsah a pouze jediný řádek textu najednou. Ale ukazuje, jak snadné je použít třídu File:
using System;
using System.IO;
namespace FileHandlingArticleApp
{
class Program
{
static void Main(string[] args)
{
if(File.Exists("test.txt"))
{
string content = File.ReadAllText("test.txt");
Console.WriteLine("Current content of file:");
Console.WriteLine(content);
}
Console.WriteLine("Please enter new content for the file:");
string newContent = Console.ReadLine();
File.WriteAllText("test.txt", newContent);
}
}
}
Zjistíte, že používáme třídu File na třech místech: Používáme ji k ověření, zda náš soubor existuje, používáme metodu ReadAllText() k načtení obsahu souboru a používáme metodu WriteAllText() k zapsání nového obsahu do souboru. Zjistíte, že nepoužívám absolutní cesty, ale pouze jednoduchá jména souborů. To umístí soubor do stejného adresáře jako spustitelný soubor, což je prozatím v pořádku. Jinak by měl být příklad snadno srozumitelný: Zkontrolujeme existenci souboru, pokud existuje, načteme jeho obsah a vypíšeme ho do konzole. Poté požádáme uživatele o nový obsah, a jakmile ho máme, zapíšeme ho do souboru. Zjevně to přepíše předchozí obsah, ale prozatím je to v pořádku. Místo toho bychom však mohli použít metodu AppendAllText. Zkuste změnit řádek WriteAllText na tento:
File.AppendAllText("test.txt", newContent);
Pokud to spustíte, uvidíte, že nový text je přidán k existujícímu textu místo přepsání. Tak jednoduché to je. Ale stále dostáváme pouze jeden řádek textu na spuštění naší aplikace. Buďme trochu kreativní a změňme to. Nahraďte poslední řádky v našem příkladu tímto:
Console.WriteLine("Please enter new content for the file - type exit and press enter to finish editing:");
string newContent = Console.ReadLine();
while(newContent != "exit")
{
File.AppendAllText("test.txt", newContent + Environment.NewLine);
newContent = Console.ReadLine();
}
Jak vidíte, instruujeme uživatele, aby zadal slovo "exit", když si přeje přestat upravovat soubor, a dokud tak neučiní, připojujeme uživatelský vstup do souboru a poté žádáme o nový řádek. Také přidáváme znak nového řádku, Environment.NewLine, aby to vypadalo jako skutečné řádky textu.
Nicméně, místo toho, abychom každým uživatelským vstupem zapisovali do souboru, by elegantnější řešení pravděpodobně vypadalo nějak takto:
Console.WriteLine("Please enter new content for the file - type exit and press enter to finish editing:");
using(StreamWriter sw = new StreamWriter("test.txt"))
{
string newContent = Console.ReadLine();
while(newContent != "exit")
{
sw.Write(newContent + Environment.NewLine);
newContent = Console.ReadLine();
}
}
Práce s proudy je trochu mimo rozsah této kapitoly, ale v tomto příkladu je skvělé, že soubor otevřeme jen jednou a poté do něj zapíšeme změny, až budeme spokojeni. V tomto případě využíváme konstrukci using() v jazyce C#, která zajistí, že odkaz na soubor bude uzavřen poté, co opustí svůj rozsah platnosti, což je po dokončení své blokové části { }. Pokud nebudete používat konstrukci using(), budete muset ručně zavolat metodu Close() na instanci StreamWriter.