Пример #1
0
        private static void PrintTree(Folder root, string spaces)
        {
            Console.WriteLine(spaces + root.Name);
            foreach (var folder in root.ChildFolders)
            {
                PrintTree(folder, spaces + " ");
            }

            foreach (var file in root.Files)
            {
                Console.WriteLine(spaces + " " + file.Name + " " + file.Size);
            }
        }
Пример #2
0
        private static Folder AddChildFoldersToDirectory(Folder root, IEnumerable<string> folders)
        {
            List<Folder> directpryFolders = new List<Folder>();
            foreach (var item in folders)
            {
                Folder folder = new Folder(item.ToString());
                directpryFolders.Add(folder);
            }

            root.ChildFolders = directpryFolders.ToArray();

            return root;
        }
        static BigInteger GetSize(Folder folder, BigInteger size)
        {
            foreach (var file in folder.files)
            {
                size += file.size;
            }

            foreach (var subFolder in folder.childFolders)
            {
                size=GetSize(subFolder, size);
            }

            return size;
        }
Пример #4
0
        private static Folder AddFilesToDirectory(Folder root, string[] files)
        {
            List<File> directoryFiles = new List<File>();
            foreach (var item in files)
            {
                FileInfo fileInfo = new FileInfo(item);
                long size = fileInfo.Length;
                File file = new File(item.ToString(), size);
                directoryFiles.Add(file);
            }

            root.Files = directoryFiles.ToArray();

            return root;
        }
        static void FindSubTree(Folder folder,string searchedName)
        {
            if (folder.name == searchedName)
            {
                var size = GetSize(folder,0);
                Console.WriteLine("Size :"+size);

                //throwing Exception to stop recursion :D
                throw new Exception("Size found");
            }

            foreach (var childfolder in folder.childFolders)
            {
                FindSubTree(childfolder, searchedName);
            }
        }
Пример #6
0
        public static void Main()
        {
            try
            {
                string directoryName = @"C:\Program Files";
                Folder programsFiles = new Folder(directoryName);

                programsFiles = MakeFilesTree(programsFiles);

                PrintTree(programsFiles, string.Empty);
                BigInteger sum = CalculateSizesOfSubTreee(programsFiles, 1);
                Console.WriteLine(sum);
            }
            catch (Exception e)
            {
                Console.WriteLine("Error!" + e.Message);
            }
        }
Пример #7
0
        private static Folder MakeFilesTree(Folder root)
        {
            var folders = Directory.EnumerateDirectories(root.Name);
            var files = Directory.GetFiles(root.Name);

            root = AddFilesToDirectory(root, files);
            root = AddChildFoldersToDirectory(root, folders);

            for (int i = 0; i < root.ChildFolders.Length; i++)
            {
                try
                {
                    root.ChildFolders[i] = MakeFilesTree(root.ChildFolders[i]);
                }
                catch (Exception)
                {
                    continue;
                }
            }

            return root;
        }
        static void Main(string[] args)
        {
            //Enter path to your folder.
            var currentFolder = new Folder("C:\\Windows");
            DirectoryInfo dir = new DirectoryInfo("C:\\Windows");

            //DirectoryInfo dir = new DirectoryInfo("C:\\Users\\Bocko\\Desktop\\Old_desktop");

            FullDirList(dir, "*",currentFolder);

            Console.WriteLine("Enter subtree name");
            var searchedName = Console.ReadLine();

            //Iterates recursivly over the chosen folder
            try
            {
                FindSubTree(currentFolder, searchedName);
            }
            catch (Exception)
            {

            }
        }
        static void FullDirList(DirectoryInfo dir, string searchPattern, Folder currentFolder)
        {
            try
            {

                foreach (FileInfo f in dir.GetFiles(searchPattern))
                {
                    currentFolder.files.Add(new File(f.Name, (ulong)f.Length));
                }

                foreach (DirectoryInfo d in dir.GetDirectories())
                {

                    var newfolder = new Folder(d.Name);
                    currentFolder.childFolders.Add(newfolder);
                    FullDirList(d, searchPattern, newfolder);

                }
            }
            catch (UnauthorizedAccessException) { }

            return;
        }
Пример #10
0
        private static BigInteger CalculateSizesOfSubTreee(Folder startFolder, int deptOfSubtree)
        {
            BigInteger sum = 0;
            foreach (var file in startFolder.Files)
            {
                sum += (BigInteger)file.Size;
            }

            if (deptOfSubtree == 0)
            {
                return sum;
            }
            else
            {
                foreach (var folder in startFolder.ChildFolders)
                {
                    sum += CalculateSizesOfSubTreee(folder, deptOfSubtree - 1);
                }

                return sum;
            }
        }
Пример #11
0
 public Folder(string name, File[] files, Folder[] folders)
     : this(name, files)
 {
     this.ChildFolders = folders;
 }