private static void BuildTree(Folder folder)
        {
            Console.WriteLine(folder.Name);
            FileInfo[] files = new FileInfo[] { };
            try
            {
                files = new DirectoryInfo(folder.Name).GetFiles();
            }
            catch (UnauthorizedAccessException uaex)
            {

            }
            foreach (var childFile in files)
            {
                File file = new File(childFile.FullName, childFile.Length);
                folder.Files.Add(file);
            }

            DirectoryInfo[] folders = new DirectoryInfo[] { };
            try
            {
                folders = new DirectoryInfo(folder.Name).GetDirectories();
            }
            catch (UnauthorizedAccessException uaex)
            {
            }

            foreach (var childFolder in folders)
            {
                Folder customFolder = new Folder(childFolder.FullName);
                folder.Folders.Add(customFolder);
                BuildTree(customFolder);
            }
        }
        public static void Main(string[] args)
        {
            const string startFolderPath = @"C:\Windows";
            Folder startFolder = new Folder(startFolderPath);
            BuildTree(startFolder);

            Console.WriteLine(GetFolderSize(startFolder));
        }
        public static long GetFolderSize(Folder rootFolder)
        {
            if (rootFolder == null)
            {
                return 0;
            }

            long childSum = 0;

            foreach (var folder in rootFolder.Folders)
            {
                childSum += GetFolderSize(folder);
            }

            return childSum + rootFolder.Files.Sum(f => f.Size);
        }