private bool SaveFilesAndFoldersToTree(FolderTree tree, string rootFolder)
        {
            tree.FolderName = Path.GetFileName(rootFolder);
            var filesInFolder = Directory.GetFiles(rootFolder);

            if (filesInFolder != null)
            {
                tree.files = new List <FileInFolder>();
                foreach (var f in filesInFolder)
                {
                    tree.files.Add(new FileInFolder(f));
                }


                var subFolders = Directory.GetDirectories(rootFolder);
                if (subFolders != null)
                {
                    tree.folders = new List <FolderTree>();
                    foreach (var dir in subFolders)
                    {
                        FolderTree subDirectory = new FolderTree();
                        tree.folders.Add(subDirectory);
                        SaveFilesAndFoldersToTree(subDirectory, dir);
                    }
                }
                return(true);
            }

            else
            {
                return(false);
            }
        }
        private void buttonContinueSerialization_Click(object sender, EventArgs e)
        {
            fileName = textBoxFileName.Text;
            if (fileName.Length < 1)
            {
                MessageBox.Show("Please enter a file name");
            }
            else
            {
                if (File.Exists(Directory.GetCurrentDirectory() + "\\" + fileName + ".dat"))
                {
                    MessageBox.Show("File with such name already exists, please choose another");
                }
                else
                {
                    FolderTree tree = new FolderTree();
                    if (SaveFilesAndFoldersToTree(tree, selectedFolder))
                    {
                        if (SerializeFolder(tree))
                        {
                            MessageBox.Show("Serialization was completed successfully");
                        }


                        else
                        {
                            MessageBox.Show("Error occurred. Please try again.");
                        }

                        this.Close();
                    }
                }
            }
        }
        private bool CreateFilesAndFoldersFromTree(FolderTree tree, string path)
        {
            path += "\\" + tree.FolderName;
            Directory.CreateDirectory(path);

            var filesInFolder = tree.files;

            if (filesInFolder != null)
            {
                foreach (var f in filesInFolder)
                {
                    File.WriteAllBytes(path + "\\" + f.Name, f.FileData);
                }


                var subFolders = tree.folders;
                if (subFolders != null)
                {
                    foreach (var dir in subFolders)
                    {
                        CreateFilesAndFoldersFromTree(dir, path);
                    }
                }
                return(true);
            }

            else
            {
                return(false);
            }
        }
        private bool SerializeFolder(FolderTree folder)

        {
            BinaryFormatter formatter = new BinaryFormatter();

            using (FileStream fs = new FileStream(fileName + ".dat", FileMode.OpenOrCreate))
            {
                formatter.Serialize(fs, folder);
            }
            return(true);
        }
        private void buttonContinueDeserialization_Click(object sender, EventArgs e)
        {
            string selectedFile = listBoxSerializedFiles.SelectedItem.ToString();

            if (selectedFile.Length < 1 || selectedFile == null)
            {
                MessageBox.Show("Plese select some file from list");
            }
            else
            {
                using (var fbDialog = new FolderBrowserDialog())
                {
                    fbDialog.Description = "Please choose the folder to deserialize file";
                    //fbDialog.SelectedPath = @"C:\";
                    DialogResult result = fbDialog.ShowDialog();

                    if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbDialog.SelectedPath))
                    {
                        BinaryFormatter formatter = new BinaryFormatter();

                        using (FileStream fs = new FileStream(selectedFile, FileMode.OpenOrCreate))
                        {
                            FolderTree deselializedTree = (FolderTree)formatter.Deserialize(fs);
                            string     path             = fbDialog.SelectedPath;
                            if (deselializedTree != null && deselializedTree.FolderName.Length > 0)
                            {
                                if (CreateFilesAndFoldersFromTree(deselializedTree, path))
                                {
                                    MessageBox.Show("Deserialization was completed successfully");
                                }

                                else
                                {
                                    MessageBox.Show("Error occurred. Please try again.");
                                }

                                this.Close();
                            }
                        }
                    }
                }
            }
        }