Здравствуйте, столкнулся с проблемой при сериализации происходящей в только что созданный файл.
Вот код:
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");
, но вот как решить эту проблему - я не знаю.
У FileStream есть FileMode - один из них, это OpenOrCreate.
OpenOrCreate - Указывает, что операционная система должна открыть файл, при его наличии; в противном случае — должен быть создан новый файл.
То есть другими словами, ваш File.Create()
лишний в данном случае и достаточно переключить FileMode.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хотел запустить анимацию грида из другого потока, но получил ошибку, что не могу обратиться к элементу из этого потокаЮзал Dispatcher
Можно ли через XAML разметку задать сортировку в коллекции, которую я собираюсь биндить или коллекция должна быть заранее отсортирована?
Вылетает при открытии формы с AxAcroPDF на части машин с AccessViolationException, на остальных работает нормальноОС Windows 7, Framework 4