Это самая насущная проблема:
FileStream savestream = new FileStream(savepath, FileMode.Create);
XmlSerializer serializer = new XmlSerializer(typeof(FormSaving));
serializer.Serialize(savestream, abc);
Вы не закрываете поток, поэтому файл нельзя открыть для чтения.Используйте оператор using
:
using (Stream savestream = new FileStream(savepath, FileMode.Create))
{
XmlSerializer serializer = new XmlSerializer(typeof(FormSaving));
serializer.Serialize(savestream, abc);
}
Вы должны использовать тот же подход при загрузке файла, а не явно вызывать Close
с вашим текущим кодом,если при десериализации возникает исключение, вы не будете закрывать поток.
Вы также открыв файл через Dialog.OpenFile
, но не закрыв этот поток ... и почемупотрудиться открыть его дважды?Просто прочитайте из потока, который вы открыли.
Наконец (на данный момент) вы ловите исключение (вслепую, без учета , с которыми исключениями действительно стоит попытаться обработать)но потом продолжаем независимо.Если вы поймали исключение, скорее всего, последняя часть метода не будет работать правильно, поэтому вам следует либо вернуть , либо вызвать другое исключение самостоятельно.