Пример #1
0
        public override void ExitRule(IParseTreeListener listener)
        {
            ISearchListener typedListener = listener as ISearchListener;

            if (typedListener != null)
            {
                typedListener.ExitExactText(this);
            }
        }
Пример #2
0
        public override void EnterRule(IParseTreeListener listener)
        {
            ISearchListener typedListener = listener as ISearchListener;

            if (typedListener != null)
            {
                typedListener.EnterHashText(this);
            }
        }
Пример #3
0
        public void Search(string path, ISearchListener listener)
        {
            var attrs = File.GetAttributes(path);

            if (!attrs.HasFlag(FileAttributes.Directory))
            {
                listener.OnFile(path);
                return;
            }

            var stack = new Stack <string>();

            stack.Push(path);

            while (stack.Count > 0)
            {
                var dir    = stack.Pop();
                var result = listener.OnDirectory(dir);
                if (result == SearchControl.Abort)
                {
                    return;
                }

                if (result == SearchControl.Visit)
                {
                    // find files
                    foreach (var file in Directory.EnumerateFiles(dir))
                    {
                        var fileResult = listener.OnFile(file);
                        if (fileResult == SearchControl.Abort)
                        {
                            return;
                        }
                    }

                    // find directories
                    foreach (var subdir in Directory.EnumerateDirectories(dir))
                    {
                        stack.Push(subdir);
                    }
                }
            }
        }