Třída DirectoryInfo

  • Třída DirectoryInfo slouží k práci se složkami.
DirectoryInfo di = new DirectoryInfo("E:\1\");

Metody:

  • EnumerateFiles(), EnumerateDirectories() – výčet bez načtení všech dat najednou (lazy)
  • GetFiles(), GetDirectories() – načte vše do paměti

Atributy:

Používá FileAttributes (např. Hidden, ReadOnly, System, Directory, …)

Třída FileInfo

  • Třída FileInfo reprezentuje soubor a umožňuje s ním provádět různé operace.
FileInfo fi = new FileInfo("E:\1\test.txt");
  • Lze získat cestu, název, velikost, datum vytvoření, upravit obsah apod.

Třída DriveInfo

  • Třída pro získání informací o discích v systému.
DriveInfo[] disky = DriveInfo.GetDrives();

Informace:

  • Název disku (Name)
  • Typ disku (DriveType) – např. Fixed, Removable, Network
  • Volné a celkové místo

Čtení souboru – statická třída File

Načtení celého obsahu

string obsah = File.ReadAllText(path);

Načtení jako pole řádků

string[] radky = File.ReadAllLines(path);

Práce s proudy (Streams)

Čtení pomocí StreamReader:

using (StreamReader sr = new StreamReader(path)) {
    string radek;
    while ((radek = sr.ReadLine()) != null) {
        Console.WriteLine(radek);
    }
}

Zápis do souboru

Textový zápis pomocí StreamWriter:

using (StreamWriter sw = new StreamWriter(File.Create(path))) {
    sw.WriteLine("Řádek 1");
}

Komprimovaný zápis – GZipStream:

using GZipStream gzs = new GZipStream(File.Create("soubor.gzip"), CompressionLevel.Optimal);
using StreamWriter sw = new StreamWriter(gzs);
sw.WriteLine("Komprimovaná data");

Binární zápis – BinaryWriter

  • Pro efektivní uložení čísel, znaků, struktur apod.
  • Zapisuje se přímo binární reprezentace:
using BinaryWriter bw = new BinaryWriter(File.Create("soubor.dat"));
bw.Write(0.33f); // rozdíl mezi float a double zápisem
  • Výsledný soubor není čitelný v textovém editoru, ale je prostorově úspornější.

Čtení XML pomocí XmlDocument

  • Pro čtení XML lze využít přístup přes DOM (Document Object Model).

Ukázkový XML vstup:

<items>
  <item att1="foo" att2="bar">
    <number>25</number>
    <str>Some string</str>
  </item>
</items>

Zpracování XML:

XmlDocument doc = new XmlDocument();
doc.Load("in.xml");
XmlNodeList nodes = doc.GetElementsByTagName("item");
 
foreach (XmlNode node in nodes) {
    foreach (XmlNode child in node.ChildNodes) {
        Console.WriteLine($"{child.Name}: {child.InnerText}");
    }
 
    foreach (XmlAttribute att in node.Attributes) {
        Console.WriteLine($"{att.Name} = {att.Value}");
    }
}

Zápis XML

  • Stromová konstrukce XML a zápis do souboru:
XmlDocument doc = new XmlDocument();
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
doc.AppendChild(declaration);
 
XmlElement item = doc.CreateElement("item");
item.SetAttribute("att1", "value1");
item.SetAttribute("att2", "value2");
 
XmlElement number = doc.CreateElement("number");
number.InnerText = "123";
item.AppendChild(number);
 
XmlElement str = doc.CreateElement("str");
str.InnerText = "text";
item.AppendChild(str);
 
doc.AppendChild(item);
 
XmlTextWriter writer = new XmlTextWriter("out.xml", Encoding.UTF8);
writer.Formatting = Formatting.Indented;
doc.WriteContentTo(writer);
writer.Close();

Serializace do XML

  • Serializace je konvertování objektu do proudu bytů a následné uložení
  • Serializace umožňuje převod objektu do XML
public class Item {
    public int Number { get; set; }
    public string Str { get; set; }
    public int[] Numbers { get; set; }
}
 
Item i = new Item { Number = 42, Str = "text", Numbers = new[] { 1, 2, 3 } };
XmlSerializer serializer = new XmlSerializer(typeof(Item));
using TextWriter writer = new StreamWriter("item.xml");
serializer.Serialize(writer, i);

Deserializace z XML

  • Načtení dat ze souboru zpět do objektu
XmlSerializer serializer = new XmlSerializer(typeof(Item));
using FileStream fs = new FileStream("item.xml", FileMode.Open);
Item deserialized = (Item)serializer.Deserialize(fs);

Formát JSON

  • JSON je textový formát pro výměnu dat, např.
{
  "jmeno": "Tomáš",
  "prijmeni": "Novák",
  "rocnik": 2
}

Serializace do JSON (System.Text.Json)

Item obj = new Item { Number = 42, Str = "text", Numbers = new[] { 1, 2, 3 } };
string json = JsonSerializer.Serialize(obj);

Deserializace z JSON

string json = "{"Number":42,"Str":"text","Numbers":[1,2,3]}";
Item obj = JsonSerializer.Deserialize<Item>(json);