[C#] XMLSerializer - TextReader schließt nicht.

Danielku15

Erfahrenes Mitglied
Hallo.
Ich hab gerade ein sehr seltsames Problem. Ich will über meinen XMLSerializer mein DataSet abspeichern. Nun hab ich folgendes Problem. Ich deserialisiere mein DataSet wenn die entsprechende Datei schon existiert. Dann importiere ich die Daten, manipuliere sie und will dann wieder serialisieren. Nur mein Problem ist, ich schließe zwar beim deserialisieren den TextReader mit Close(). Jedoch bekomme ich beim serialisieren immer eine IOException dass der Zugriff verweigert sei. Aber ich schließe den Stream.
Wo kann hier der Fehler liegen?

C#:
string sCache = System.IO.Path.Combine(_sPath, "MediaOrganzierCache.moc");
XmlSerializer oSerializer = new XmlSerializer(typeof(ITunesBrowserCollection));
if (File.Exists(sCache))
{
    try
    {
        TextReader oReader = new StreamReader(sCache);
        _coSongs = (ITunesBrowserCollection)oSerializer.Deserialize(oReader);
        oReader.Close(); // <-- Hier wird geschlossen
        bLoadFromFileSystem = false;
    }
    catch
    {
        bLoadFromFileSystem = true;
    }
}
// .. Import und Manipulation

try
{
    TextWriter oWriter = new StreamWriter(sCache); // <-- Hier wird die Exception geworfen
    oSerializer.Serialize(oWriter, _coSongs);
    oWriter.Close();
    FileInfo oInfo = new FileInfo(sCache);
    if (oInfo.Exists)
    {
        oInfo.Attributes = FileAttributes.Hidden;
    }
}
catch(Exception e)
{
    DialogHelper.ShowError("Fehler beim Schreiben des Caches: " + e.Message);
}

Gruß Daniel
 
Ich hab mir jetzt nicht den Sourcecode vom Serializer angesehen, was aber sein könnte ist, dass dir dieser dienen Stream offen hält. Versuch mal entweder einen zweiten Serializer zu verwenden, oder den ersten neu zu instanziieren. (Zumindest kannst du damit herausfinden, ob das Problem beim Serializer liegt).
 
Ich hab es gerade mal ausprobiert. Funktioniert nicht. Ich hab den Serializer auf null gesetzt. Ihn neu Initialisiert und es hat nichts gebracht. Ich hab den StreamReader noch zusätzlich über Dispose() vernichtet und selbst dann bleibt die Datei geöffnet.
Kann es an folgendem liegen:
Die ITunesBrowserCollection ist ein DataSet. Wenn ich das Dataset deserialisiere, dass das Dataset nun direkt mit der XML Datei arbeitet und nicht mit im RAM, und somit die Datei geöffnet bleibt.
 
Zurück