Пример #1
0
        private static void PopulateFolders(string dirName, Folder parentFolder)
        {
            string[] folderItems = Directory.GetFileSystemEntries(dirName);

            foreach (var folderItem in folderItems)
            {
                // If the current node is a filename, don't call recursion and continue
                try
                {
                    Directory.GetDirectories(folderItem);
                }
                catch (IOException ex)
                {
                    FileInfo finfo = new FileInfo(folderItem);
                    FileItem fileSubItem = new FileItem(folderItem, finfo.Length);
                    parentFolder.AddFile(fileSubItem);
                    continue;
                }
                // Some windows folders could be restricted, so just output a warning message and continue
                catch (UnauthorizedAccessException)
                {
                    Console.WriteLine("Warning: No access to folder {0}", dirName);
                    continue;
                }

                Folder folderSubItem = new Folder(folderItem, true);
                parentFolder.AddFolder(folderSubItem);

                PopulateFolders(folderItem, folderSubItem);
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            string rootDirectory = @"C:\Windows";
            Folder rootFolder = new Folder(rootDirectory, false);

            Console.WriteLine("Getting items in {0}, this can take a while", rootDirectory);
            Console.WriteLine();

            PopulateFolders(rootDirectory, rootFolder);

            // Create the Windows Folder tree
            FoldersTree windowsFolderTree = new FoldersTree(rootFolder);

            try
            {
                // Get the subtree, by folder path string
                Folder subFolderFilesSize = windowsFolderTree.GetFolderByName("C:\\Windows\\addins\\Test");
                FoldersTree subFoldersTree = windowsFolderTree.GetSubTree(subFolderFilesSize);

                long sumFilesSize = subFoldersTree.GetTreeFilesLength();

                Console.WriteLine("Files size sum in Tree({0}) = {1}", subFolderFilesSize.Name, sumFilesSize);
            }
            catch (FileNotFoundException ex)
            {
                Console.WriteLine("Error finding files size: {0}", ex.Message);
            }
        }
Пример #3
0
        private long GetFilesLengthDFS(Folder folder, long currSumSize)
        {
            Folder currFolder = folder;

            // Get all files in currentFolder
            foreach (var subItem in currFolder.Files)
            {
                currSumSize += subItem.Size;
            }

            // Iterate through subfolders
            foreach (var subItem in currFolder.Subfolders)
            {
                currSumSize = GetFilesLengthDFS(subItem, currSumSize);
            }

            return currSumSize;
        }
Пример #4
0
 public void AddFolder(Folder subFolder)
 {
     this.subfolders.Add(subFolder);
 }
Пример #5
0
        private Folder GetFolderByNameBFS(Folder folder, string searchFolderName)
        {
            Folder currFolder = folder;
            Folder foundFolder = null;

            if (currFolder.Name == searchFolderName)
            {
                foundFolder = currFolder;
                return foundFolder;
            }
            else
            {
                foreach (var subFolder in currFolder.Subfolders)
                {

                    foundFolder = GetFolderByNameBFS(subFolder, searchFolderName);
                    // Recursion get out condition
                    if (foundFolder != null)
                    {
                        return foundFolder;
                    }

                }

                if (foundFolder == null)
                {
                    throw new FileNotFoundException(String.Format("Folder with name {0} not found", searchFolderName));
                }
            }
            return null;
        }
Пример #6
0
        /* ----------------------
         *      METHODS
         * -------------------- */
        // By given node, return the subtree
        public FoldersTree GetSubTree(Folder subTreeRoot)
        {
            FoldersTree subTree = new FoldersTree(subTreeRoot);

            return subTree;
        }
Пример #7
0
 /* ----------------------
  *      CONSTRUCTORS
  * -------------------- */
 public FoldersTree(Folder root)
 {
     this.root = root;
 }