System.IO.IOException: "The process cannot access the file, because it is being used by another process"

0

Cześć,
Pisząc aplikację webową napotkałem na następujący problem:
screenshot-20221011191319.png
Kod mój wygląda następująco:

using System.Xml.Serialization;

namespace KPIROnline.Tools
{
    public class XMLTools
    {
        public static void SaveXML (string path, Type T, object o)
        {
            XmlSerializer serializer = new XmlSerializer(T);
            using (StreamWriter sw = new StreamWriter(path))
            {
                serializer.Serialize(sw, o);
                sw.Close();
            }
        }

        public static object ReadXML (string path, Type T)
        {
            XmlSerializer serializer = new XmlSerializer(T);
            using (StreamReader sw = new StreamReader(path))
            {
                var obj = serializer.Deserialize(new StreamReader(path)) as object;
                sw.Close();
                return obj;
            }
        }
    }
}

Nie rozumiem dlaczego rzucane jest powyższe exception. Po każdej operacji na pliku, zamykam go, a mimo to kod rzuca wyjątek. Jaka może być tego przyczyna?

1

serializer również wymaga using()

0
_13th_Dragon napisał(a):

serializer również wymaga using()

Do serializera nie da się dodać using(). Kompilator zwraca błąd, że XmlSerializer nie posiada System.IDisposable()

5

serializer może jest disposable, ale wątpię żeby to była przyczyna problemu.
tworzysz dwa streamreadery z czego jednego nie zamykasz a drugiego nie używasz:

using (StreamReader sw = >>new StreamReader(path)<<)
            {
                var obj = serializer.Deserialize(>>new StreamReader(path)<<) as object;

po drugie jeśli dostaniesz więcej requestów to jeden będzie blokował drugi (zwłaszcza zapisujący będzie blokował odczytujący), najlepiej użyj bazy danych zamiast plików lub używaj locków (najlepiej ReaderWriterLock)

1 użytkowników online, w tym zalogowanych: 0, gości: 1