Преобразование вида дерева в byte[], затем снова обратно
Я пытаюсь преобразовать вид дерева в байтовый массив, а затем обратно. пока форма загружается, она загружает структуру моих документов. Затем, насколько я знаю, он преобразует его в байтовый массив и обратно, но я не уверен, как преобразовать байтовый массив обратно в представление дерева. Вот мой код
namespace tree_view
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string filepath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
ListDirectory(treeView1, filepath);
}
private static void ListDirectory(TreeView treeView, string path)
{
treeView.Nodes.Clear();
var stack = new Stack<TreeNode>();
var rootDirectory = new DirectoryInfo(path);
var node = new TreeNode(rootDirectory.Name) { Tag = rootDirectory };
stack.Push(node);
while (stack.Count > 0)
{
var currentNode = stack.Pop();
var directoryInfo = (DirectoryInfo)currentNode.Tag;
foreach (var directory in directoryInfo.GetDirectories())
{
var childDirectoryNode = new TreeNode(directory.Name) { Tag = directory };
currentNode.Nodes.Add(childDirectoryNode);
stack.Push(childDirectoryNode);
}
foreach (var file in directoryInfo.GetFiles())
currentNode.Nodes.Add(new TreeNode(file.Name));
}
treeView.Nodes.Add(node);
}
private Byte[] SerilizeQueryFilters()
{
BinaryFormatter bf = new BinaryFormatter();
TreeNodeCollection tnc = treeView1.Nodes;
List<TreeNode> list = new List<TreeNode>();
list.Add(treeView1.Nodes[0]);
using (MemoryStream ms = new MemoryStream())
{
bf.Serialize(ms, list);
return ms.GetBuffer();
}
}
private void DeSerilizeQueryFilters(byte[] items)
{
BinaryFormatter bf = new BinaryFormatter();
List<TreeNode> _list = new List<TreeNode>();
try
{
using (MemoryStream ms = new MemoryStream())
{
ms.Write(items, 0, items.Length);
ms.Position = 0;
_list = bf.Deserialize(ms) as List<TreeNode>;
treeView2 = _list;
}
}
catch { }
}
private void button1_Click(object sender, EventArgs e)
{
byte[] data = SerilizeQueryFilters();
DeSerilizeQueryFilters(data);
}
}
Таким образом, бит, который дает мне ошибку на данный момент, это "treeView2 = _list;" как я "Не могу неявно преобразовать тип System.collections.generic.List в System.Windows.Forms.TreeView". У кого-нибудь есть идеи?
1 ответ
В вашем DeSerilizeQueryFilters()
метод, который вы должны просто вызвать .AddRange()
на вашем TreeView Nodes
собрать и добавить все узлы из вашего списка.
_list = bf.Deserialize(ms) as List<TreeNode>;
treeView2.Nodes.AddRange(_list.ToArray()); //The parameter needs to be an array.
РЕДАКТИРОВАТЬ:
Кроме того, в вашем SerilizeQueryFilters()
метод, который вы в настоящее время только добавляете первый TreeNode
в ваш список. Чтобы добавить все узлы, просто замените:
list.Add(treeView1.Nodes[0]);
с:
foreach(TreeNode node in treeView1.Nodes)
{
list.Add(node);
}