Ошибка при сериализации

183
24 апреля 2018, 00:32

Здравствуйте, столкнулся с проблемой при сериализации происходящей в только что созданный файл.

Вот код:

private void PrepareLaunch()
{
    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Data";
    Directory.CreateDirectory(path);
    if (!File.Exists(path + "\\List.xml"))
    {
        File.Create(path + "\\List.xml");
        XmlFile.Serialize<ObservableCollection<MyClass>>(path + "\\List.xml", new ObservableCollection<MyClass>());
    }
}

Статический класс XmlFile - это просто обвёртка для более удобного использования сериализации/десериализации, код ниже.

public static class XmlFile
{
    public static void Serialize<T>(string path, T o)
    {
        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Write, FileShare.Read))
        {
            new XmlSerializer(typeof(T)).Serialize(fs, o);
        }
    }
    public static T Deserialize<T>(string path)
    {
        T res;
        using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            res = (T)new XmlSerializer(typeof(T)).Deserialize(fs);
        }
        return res;
    }
}

Проблема заключается в следующем: при выполнении функции XmlFile.Serialize возникает ошибка с сообщением о том, что файл занят другим процессом. Не сложно догадаться, что речь о процессе выполнявшемся до, а значит - File.Create(path + "\\List.xml");, но вот как решить эту проблему - я не знаю.

Answer 1

У FileStream есть FileMode - один из них, это OpenOrCreate.

OpenOrCreate - Указывает, что операционная система должна открыть файл, при его наличии; в противном случае — должен быть создан новый файл.

То есть другими словами, ваш File.Create() лишний в данном случае и достаточно переключить FileMode.

READ ALSO
Ошибка при обращении к ГУИ с использованием Dispatcher

Ошибка при обращении к ГУИ с использованием Dispatcher

Хотел запустить анимацию грида из другого потока, но получил ошибку, что не могу обратиться к элементу из этого потокаЮзал Dispatcher

150
Определение текста с изображения. OCR

Определение текста с изображения. OCR

Доброго времени сутокИмеется онлайн игра

149
Сортировка элементов в компонентах WPF

Сортировка элементов в компонентах WPF

Можно ли через XAML разметку задать сортировку в коллекции, которую я собираюсь биндить или коллекция должна быть заранее отсортирована?

168
При использовании AxAcroPDF на части машин AccessViolationException - C#

При использовании AxAcroPDF на части машин AccessViolationException - C#

Вылетает при открытии формы с AxAcroPDF на части машин с AccessViolationException, на остальных работает нормальноОС Windows 7, Framework 4

155