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);
                    }
                }
            }
        }
Exemple #2
0
 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;
                }
            }
        }