This article has been localized into Czech by the community.
Manipulace se soubory a adresáři
V předchozí kapitole jsme se podívali na čtení a zápis textu s jednoduchými soubory. Pro to jsme použili třídu File, která ale dělá mnohem více než jen čtení a zápis. Když ji kombinujeme s třídou Directory, můžeme provádět prakticky jakoukoli operaci se souborovým systémem, jako je přejmenovávání, přesouvání, mazání a tak dále.
Tato kapitola poskytne mnoho příkladů právě na tyto věci. Vysvětlení budou omezena, protože použité metody jsou poměrně jednoduché a snadno použitelné. Měli byste si být vědomi dvou věcí: Zaprvé se ujistěte, že importujete jmenný prostor System.IO takto:
using System.IO;
Také si buďte vědomi, že zde neprovádíme žádné zpracování výjimek. Zkontrolujeme, zda soubory a adresáře existují před jejich použitím, ale není zde žádné zpracování výjimek, takže v případě jakýchkoli problémů aplikace spadne. Zpracování výjimek je obecně dobrý nápad při provádění IO operací. Pro více informací si prosím přečtěte kapitolu o zpracování výjimek v tomto tutoriálu.
Ve všech příkladech používáme jednoduché názvy souborů a adresářů, které musí existovat ve stejném adresáři jako generovaný EXE soubor vaší aplikace. V nastavení projektu můžete vidět, kam je váš EXE soubor generován.
Mazání souboru
if(File.Exists("test.txt"))
{
File.Delete("test.txt");
if(File.Exists("test.txt") == false)
Console.WriteLine("File deleted...");
}
else
Console.WriteLine("File test.txt does not yet exist!");
Console.ReadKey();
Mazání adresáře
if(Directory.Exists("testdir"))
{
Directory.Delete("testdir");
if(Directory.Exists("testdir") == false)
Console.WriteLine("Directory deleted...");
}
else
Console.WriteLine("Directory testdir does not yet exist!");
Console.ReadKey();
Pokud adresář testdir není prázdný, obdržíte výjimku. Proč? Protože tato verze metody Delete() na třídě Directory funguje pouze na prázdné adresáře. Je to velmi snadné změnit:
Directory.Delete("testdir", true);
Další parametr zajišťuje, že metoda Delete() je rekurzivní, což znamená, že projde podadresáře a smaže soubory v nich, než smaže adresáře.
Přejmenování souboru
if(File.Exists("test.txt"))
{
Console.WriteLine("Please enter a new name for this file:");
string newFilename = Console.ReadLine();
if(newFilename != String.Empty)
{
File.Move("test.txt", newFilename);
if(File.Exists(newFilename))
{
Console.WriteLine("The file was renamed to " + newFilename);
Console.ReadKey();
}
}
}
Všimnete si, že používáme metodu Move() k přejmenování souboru. Proč ne metodu Rename()? Protože žádná taková metoda neexistuje, jelikož přesun a přejmenování je v podstatě to samé.
Přejmenování adresáře
Udělat to samé s adresářem je stejně snadné:
if(Directory.Exists("testdir"))
{
Console.WriteLine("Please enter a new name for this directory:");
string newDirName = Console.ReadLine();
if(newDirName != String.Empty)
{
Directory.Move("testdir", newDirName);
if(Directory.Exists(newDirName))
{
Console.WriteLine("The directory was renamed to " + newDirName);
Console.ReadKey();
}
}
}
Vytváření adresáře
Vytvoření zcela nového adresáře je také snadné - stačí použít metodu CreateDirectory() na třídě Directory, jak je ukázáno v tomto příkladu:
Console.WriteLine("Please enter a name for the new directory:");
string newDirName = Console.ReadLine();
if(newDirName != String.Empty)
{
Directory.CreateDirectory(newDirName);
if(Directory.Exists(newDirName))
{
Console.WriteLine("The directory was created!");
Console.ReadKey();
}
}
Čtení a zápis souborů
Jako poslední příklad vám ukážu, jak třída File usnadňuje čtení a zápis do souboru. To lze udělat na mnoho způsobů v jazyce C#, ale metody Read* a Write*, které naleznete ve třídě File, jsou pravděpodobně nejjednoduššími. Existují tři verze: WriteAllBytes(), WriteAllLines() a WriteAllText(), s odpovídajícími metodami Read. Nejjednodušší k použití je poslední z nich, která vezme jednoduchý řetězec jako vstup. Podívejme se, jak fungují na jednoduchém příkladu:
string fileContents = "John Doe & Jane Doe sitting in a tree...";
File.WriteAllText("test.txt", fileContents);
string fileContentsFromFile = File.ReadAllText("test.txt");
Console.WriteLine(fileContentsFromFile);
Všimněte si, že potřebuji jen velmi málo řádků k zapsání něčeho do souboru a poté přečtení zpět! První parametr obou metod je cesta, kam má být text napsán a odkud má být přečten. Obvykle byste zde zadali úplnou cestu, ale abychom příklad zjednodušili, specifikujeme pouze název souboru, čímž se soubor zapíše do stejného adresáře jako EXE soubor.
Shrnutí
Jak vidíte, třídy File a Directory jsou obrovskou pomocí, pokud potřebujete pracovat se soubory a adresáři. Dokážou provádět většinu potřebných operací, a pokud budete potřebovat provést ještě pokročilejší úkony, tyto třídy a jejich metody obvykle slouží jako skvělé základy, na kterých lze dále stavět.