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); } }
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; }
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); } }
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); } }
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; }
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; } }
public Folder(string name, File[] files, Folder[] folders) : this(name, files) { this.ChildFolders = folders; }