public void ConstructTreeDfs(Folder dir) { var directory = new ZlpDirectoryInfo(dir.Name); if (directory.Exists) { ZlpDirectoryInfo[] childDirs; try { childDirs = directory.GetDirectories(); } catch (Exception e) { Console.WriteLine(e.Message); return; } var childFolders = new Folder[childDirs.Length]; for (var i = 0; i < childDirs.Length; i++) { childFolders[i] = new Folder(childDirs[i].FullName); } dir.AddChildFolders(childFolders); var files = directory.GetFiles(); var f = new File[files.Length]; for (var i = 0; i < files.Length; i++) { try { f[i] = new File(files[i].FullName, files[i].Length); } catch (Exception) { continue; } } dir.AddFiles(f); if (DeepWalk) { foreach (var item in childFolders) { ConstructTreeDfs(item); } } } }
public void ConstructTreeDfs(Folder dir) { var directory = new DirectoryInfo(dir.Name); List<DirectoryInfo> childDirs; try { childDirs = directory.GetDirectories().ToList(); } catch (UnauthorizedAccessException) { return; } var childFolders = new Folder[childDirs.Count]; for (var i = 0; i < childDirs.Count; i++) { childFolders[i] = new Folder(childDirs[i].FullName); } dir.AddChildFolders(childFolders); var files = directory.GetFiles(); var f = new File[files.Length]; for (var i = 0; i < files.Length; i++) { f[i] = new File(files[i].FullName, files[i].Length); } dir.AddFiles(f); if (DeepWalk) { foreach (var item in childFolders) { ConstructTreeDfs(item); } } }
public FileTree(string rootPath, bool deepWalk = false) { RootFolder = new Folder(rootPath); DeepWalk = deepWalk; ConstructTreeDfs(RootFolder); }
public void AddChildFolders(Folder[] folders) { ChildFolders = folders; }
public Folder(string name, File[] files, Folder[] childFolders) { Name = name; Files = files; ChildFolders = childFolders; }
public long CalculateFilesSizesDfs(Folder startFolder, string searchForFolder, bool isFound) { long sizeInBytes = 0; if (startFolder.Name == searchForFolder) { isFound = true; } if (!isFound) { foreach (var item in startFolder.ChildFolders.Where(item => item.Name == searchForFolder)) { isFound = true; sizeInBytes += CalculateFilesSizesDfs(item, searchForFolder, true); break; } return sizeInBytes; } if (startFolder.Files != null) { sizeInBytes += startFolder.Files.Sum(item => item.FileSize); } if (startFolder.ChildFolders == null) return sizeInBytes; { sizeInBytes += startFolder.ChildFolders.Sum(item => CalculateFilesSizesDfs(item, searchForFolder, true)); } return sizeInBytes; }