Я использую BinaryFormatter для загрузки & Сохраните мое treeView. Я хочу предотвратить ошибки, если файл назначения не существует. Мой код:BinaryFormatter: SerializationException
public static void Load(TreeView tree, string filename)
{
if (!File.Exists(filename))
{
Stream file = File.Create(filename);
return;
}
else
{
using (Stream file = File.Open(filename, FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(file);
TreeNode[] nodeList = (obj as IEnumerable<TreeNode>).ToArray();
tree.Nodes.AddRange(nodeList);
}
}
}
Если я вручную удалю файл, он должен создать новый файл, называемый так же, как и предыдущий. Проблема в том, что когда он достигает object obj = bf.Deserialize(file);
, появляется ошибка Attempting to deserialize an empty stream.
. Я предполагаю, что в новом файле отсутствуют некоторые бинарные структуры или что-то в этом роде, но я не уверен, как его решить. И если я попытаюсь добавить узел в treeView и сохранить его позже, я получаю ошибку, этот файл используется другой программой.
Спасибо, работает как шарм. Есть еще одна вещь, которую я напишу, если кто-то ищет ответ в будущем: после создания нового файла вы должны закрыть его, иначе вы не сможете загрузить его до перезапуска приложения. Просто добавьте «file.Close();» перед «возвратом»; – PotatoBox
'FileMode.OpenOrCreate' не должен работать для этого. –
И блок 'using() {}' выполняет 'Close()'. –