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); } }
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); } }
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; }
public void AddFolder(Folder subFolder) { this.subfolders.Add(subFolder); }
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; }
/* ---------------------- * METHODS * -------------------- */ // By given node, return the subtree public FoldersTree GetSubTree(Folder subTreeRoot) { FoldersTree subTree = new FoldersTree(subTreeRoot); return subTree; }
/* ---------------------- * CONSTRUCTORS * -------------------- */ public FoldersTree(Folder root) { this.root = root; }