Witam.
Piszę aplikacje Windows Store dla Windows 8, która wczytuje i zapisuje dane do pliku XML. Niestety mam pewien problem. Po otwarciu aplikacji dane się ładnie wczytują, następnie próbuję zapisać jakieś zmiany do pliku i to również się udaje, niestety ponowne załadowanie danych z pliku już nie. Wyskakuje mi wyjątek 'System.UnauthorizedAccessException'. Wydaje mi się że problemem jest to, że nie można zamknąć poprawnie strumieni. Szukałem sporo informacji w internecie, ale bez rezultatu. Tutaj jest opisany podobny problem: http://www.damirscorner.com/ClosingStreamsInWinRT.aspx. Proszę o pomoc.
Funkcja wczytująca dane:
public static async void LoadTravels()
{
TravelList = new ObservableCollection<Travel>();
StorageFolder defaultFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var file = await defaultFolder.GetFileAsync("data.xml");
using (IInputStream inStream = await file.OpenAsync(FileAccessMode.Read))
{
XDocument xml = XDocument.Load(file.Path);
//ładowanie danych z XML
//...
}
}
Funkcja zapisująca dane:
public static async void SerializeToXML(ObservableCollection<Travel> list)
{
//Serialization
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file = await folder.CreateFileAsync("data.xml", CreationCollisionOption.ReplaceExisting);
IRandomAccessStream randomStream = await file.OpenAsync(FileAccessMode.ReadWrite);
IOutputStream outStream = randomStream.GetOutputStreamAt(0);
Stream stream = outStream.AsStreamForWrite();
XmlRootAttribute oRootAttr = new XmlRootAttribute();
oRootAttr.ElementName = "Travel";
oRootAttr.IsNullable = true;
XmlSerializer oSerializer = new XmlSerializer(typeof(ObservableCollection<Travel>), oRootAttr);
oSerializer.Serialize(stream, list);
await outStream.FlushAsync();
stream.Dispose();
randomStream.Dispose();
outStream.Dispose();
}