public static Folder CreateTreeByTraversingDirectory(DirectoryInfo directory)
        {
            var directoryFolder = new Folder(directory.Name);
            DirectoryInfo[] subDirectories = directory.GetDirectories();
            FileInfo[] allFiles = directory.GetFiles();

            foreach (var currentFile in allFiles)
            {
                directoryFolder.AddFile(new File(currentFile.Name, currentFile.Length));
            }

            try
            {
                foreach (var subdir in subDirectories)
                {
                    var resultSubDir = CreateTreeByTraversingDirectory(subdir);
                    directoryFolder.AddFolder(resultSubDir);
                }
            }
            catch (UnauthorizedAccessException e)
            {
                Console.WriteLine(e.Message);
            }

            return directoryFolder;
        }
        public static long CalculateSumOfFilesIn(Folder folder)
        {
            var root = folder;
            long sumOfFileSizes = 0;
            if (root.ChildFolders.Length > 0)
            {
                foreach (var childFolder in root.ChildFolders)
                {
                    var sizeOfCurrentChildFolder = CalculateSumOfFilesIn(childFolder);
                    sumOfFileSizes += sizeOfCurrentChildFolder;
                }
            }

            foreach (var file in root.Files)
            {
                sumOfFileSizes += file.Size;
            }

            return sumOfFileSizes;
        }
        private void ResizeFolderContainer()
        {
            var doubleSize = this.childFolders.Length * 2;
            var doubleSizedFolderContainer = new Folder[doubleSize];
            for (int i = 0, len = this.childFolders.Length; i < len; i++)
            {
                doubleSizedFolderContainer[i] = this.childFolders[i];
            }

            this.childFolders = doubleSizedFolderContainer;
        }
        public void AddFolder(Folder folder)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("Folder can not be null!");
            }

            if (this.childFolders.Length == this.folderIndex)
            {
                ResizeFolderContainer();
            }

            this.childFolders[folderIndex] = folder;
            this.folderIndex++;
        }