Stránka 1 z 1

C# zapisování do XML bez přepsání celého souboru

Napsal: 19 bře 2016 14:22
od lukas.sei
Čaute,
Dá se v C# zapisovat do XML souboru bez jeho celého přepsání ?
Mám soubor který vypadá asi takhle:

Kód: Vybrat vše

<?xml version="1.0" encoding="utf-8"?>
<skupiny>
  <skupina Jmeno="admin">
    <Heslo>*****</Heslo>
  </skupina>
  <skupina Jmeno="normal">
    <Heslo>*****</Heslo>
  </skupina>
</skupiny>

A já bych potřeboval do toho souboru pouze připsat další skupinu a nepřepsat tím celý soubor.
Ukládání mám zatím řešeno podle tohohle návodu:

Kód: Vybrat vše

using (XmlWriter xw = XmlWriter.Create(@"soubor.xml", settings))
{
        xw.WriteStartDocument(); // hlavička
        xw.WriteStartElement("skupiny"); // otevření kořenového elementu uzivatele

        // zápis jednotlivých uživatelů
        foreach (Skypiny s in skupiny)
        {
                xw.WriteStartElement("skupina");
                xw.WriteAttributeString("Jmeno", s.ToString());
                xw.WriteEndElement();
                xw.WriteElementString("Heslo", u.Heslo.ToString();
        }

        xw.WriteEndElement(); // uzavření kořenového elementu
        xw.WriteEndDocument(); // konec dokument
        xw.Flush();
}


Za každou radu budu velmi rád.

Re: C# zapisování do XML bez přepsání celého souboru  Vyřešeno

Napsal: 19 bře 2016 17:11
od faraon
http://stackoverflow.com/questions/2092 ... -xmlwriter
http://www.codeproject.com/Articles/152 ... e-XML-File
http://www.experts-exchange.com/questio ... riter.html

Otevřít soubor v režimu Append, kde se připisuje na jeho konec, se zrovna u XML prostě nedá, a pro režim Random, který dokáže zapisovat na libovolné místo v souboru, bys stejně nejdřív musel celý soubor přečíst, od místa kde chceš vložit nový záznam jeho obsah zkopírovat, do toho místa zapsat tvůj nový záznam, a potom ten konec zase zkopírovat zpět za něj. Takže mi připadá jednodušší a rychlejší to všechno načíst a uložit najednou. Navíc se budou z disku načítat a zase ukládat celé sektory najednou, což náhodný zápis ještě víc zpomaluje.
Doporučuji nastudovat nízkoúrovňové služby operačního systému, bez jakýchkoliv nadstaveb a knihoven, z těch ti to bude jasné ;-)