private static void AddChildNodes(ArcFile arcFile, string parentPath, Action <string, bool> extractStartCallBack, Action <string, double> extractReportProgressCallBack, Action <string> extractEndCallBack, List <FileNodeBase> files, bool mergeTrailingSlash) { var arcNode = arcFile.CreateNode(parentPath, ApplicationSettings.Instance.ArcRegion); if (arcNode is ArcDirectoryNode directoryNode) { // Keep track of visited names to avoid having duplicate nodes differing by a trailing slash. // Assume file names are also unique within a directory. var names = new HashSet <string>(); var folder = CreateFolder(arcFile, directoryNode, extractStartCallBack, extractReportProgressCallBack, extractEndCallBack, mergeTrailingSlash); foreach (var node in arcFile.GetChildren(directoryNode, ApplicationSettings.Instance.ArcRegion)) { var treeNode = CreateNode(arcFile, node, extractStartCallBack, extractReportProgressCallBack, extractEndCallBack, mergeTrailingSlash); // Only ignore duplicates if directories differing by a trailing slash should be merged. if (!mergeTrailingSlash || !names.Contains(treeNode.Name)) { files.Add(treeNode); names.Add(treeNode.Name); } } } }
private static void RecurseOverTree(ArcFile arc, ArcFileTreeNode node) { foreach (var child in arc.GetChildren(node)) { Console.WriteLine($"{child}"); RecurseOverTree(arc, child); } }
private static void AddChildrenRecursive(ArcFile arcFile, List <ArcFileNode> files, ArcDirectoryNode parent, bool mergeTrailingSlash) { foreach (var child in arcFile.GetChildren(parent, ApplicationSettings.Instance.ArcRegion)) { // Assume files have no children, so only recurse for directories. switch (child) { case ArcFileNode file: files.Add(file); break; case ArcDirectoryNode directory: AddFilesRecursive(arcFile, directory, files, mergeTrailingSlash); break; default: break; } } }
private static void AddAllFilesRecursive(ArcFile arcFile, List <IArcNode> files, ArcDirectoryNode parent) { foreach (var child in arcFile.GetChildren(parent, ApplicationSettings.Instance.ArcRegion)) { // Assume files have no children, so only recurse for directories. switch (child) { case ArcFileNode file: files.Add(file); break; case ArcDirectoryNode directory: files.Add(directory); AddAllFilesRecursive(arcFile, files, directory); break; default: break; } } }