Здравствуйте, столкнулся с проблемой при сериализации происходящей в только что созданный файл.
Вот код:
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.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей