WP7 i XDocument


(Grzech U007) #1

Witam.

Napisałem funkcję, która zapisuje dane do pliku xml. Wygląda ona następująco:

public void AddItem()

        {

            using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())

            {

                using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream("mydata.xml", FileMode.OpenOrCreate, myIsolatedStorage))

                {

                    XDocument doc;

                    if (isoStream.Length == 0)

                    {

                        doc = new XDocument(

                            new XDeclaration("1.0", "utf-8", null),

                            new XElement("wiadomosci")

                        );

                        doc.Save(isoStream);

                    }

                    else

                    {

                        doc = XDocument.Load(isoStream);

                        doc.Root.Add(new XElement("rodzaj", 

                            new XAttribute("id", "1"),

                            new XElement("tresc", "działa!")

                        ));

                        doc.Save(isoStream);

                    }

                }

            }

        }

Niestety funkcja nie działa poprawnie. Na początku plik nie istnieje, więc funkcja tworzy go. Po drugim uruchomieniu plik już jest, i po dodaniu do niego danych zamiast takiej struktury:

<?xml version="1.0" encoding="utf-8"?>


działa

otrzytmuję taką jak poniżej. Czemu tak się dzieje?

<?xml version="1.0" encoding="utf-8"?>


<?xml version="1.0" encoding="utf-8"?>


działa

(Fiołek) #2

Strzelam, że XDocument.Save(Stream) tylko dopisuje dane do strumienia, nie je nadpisuje(a XDocument.Load przemieszcza kursor pliku na koniec) - musisz zrobić to ręcznie.


(Grzech U007) #3

Wielkie dzięki Fiołek. Przestawiłem kursor pliku na sam początek i śmiga :slight_smile:


(Fiołek) #4

To tak dla bezpieczeństwa ustaw jeszcze długość na zero(Stream.SetLength), bo jakby Ci przyszło usuwać coś z dokumentu, to na końcu pliku zostaną śmieci :wink: