我正在使用BinaryFormatter加载和保存我的treeView。如果目标文件不存在,我想防止出现错误。我的代码:
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中,并在稍后保存它,我会收到错误消息,该文件正被其他程序使用。
发布于 2013-07-20 02:32:50
public static void Load(TreeView tree, string filename)
{
using (var file = File.Open(filename, FileMode.OpenOrCreate))
{
if (file.Length.Equals(0))
return;
var bf = new BinaryFormatter();
var obj = bf.Deserialize(file);
var nodeList = (obj as IEnumerable<TreeNode>).ToArray();
tree.Nodes.AddRange(nodeList);
}
}https://stackoverflow.com/questions/17753118
复制相似问题