/// <summary>Advances the enumerator to the next element of the collection.</summary>
        ///
        /// <returns>
        /// True if the enumerator was successfully advanced to the next element; false if the enumerator
        /// has passed the end of the collection.
        /// </returns>
        public bool MoveNext()
        {
            // We're done boise! Nothing to do.
            if (currentEnumerator == null)
            {
                return(false);
            }

            bool findResult;

            do
            {
                findResult = currentEnumerator.MoveNext();
                if (findResult)
                {
                    // Once we're in this block, findResult is only used to
                    // return the current file. It can safely be set to false.
                    findResult = IncludeFind(currentEnumerator.CurrentName,
                                             currentEnumerator.CurrentAttributes,
                                             out bool subdirectory);
                    // We're scanning files and this guy has been caught redhanded.
                    if (findResult)
                    {
                        current = currentEnumerator.Current;
                    }

                    // We're scanning subdirectories and this guy is invited to the party
                    if (subdirectory)
                    {
                        EnqueueState();
                    }
                }
                else if (!findResult)
                {
                    // This directory has been emptied

                    /*if (currentState.Search.HasSearchPattern) {
                     *      // Now search for each individual subdirectories
                     *      // because the search pattern didn't support it.
                     *      currentEnumerator = currentState.ChangeToSubdirState();
                     * }
                     * else {*/
                    // Go to the next state in the queue
                    DequeueState();
                    //}
                }
            } while (!findResult && !IsFinished);
            if (!findResult)
            {
                current = null;
            }
            return(findResult);
        }
        /// <summary>Advances the enumerator to the next element of the collection.</summary>
        ///
        /// <returns>
        /// True if the enumerator was successfully advanced to the next element; false if the enumerator
        /// has passed the end of the collection.
        /// </returns>
        public bool MoveNext()
        {
            // We're done boise! Nothing to do.
            if (currentEnumerator == null)
            {
                return(false);
            }

            bool findResult;

            do
            {
                findResult = currentEnumerator.MoveNext();
                if (findResult)
                {
                    // Once we're in this block, findResult is only used to
                    // return the current file. It can safely be set to false.
                    findResult = IncludeFind(currentEnumerator.CurrentName,
                                             currentEnumerator.CurrentAttributes,
                                             out bool subdirectory);
                    // We're scanning files and this guy has been caught redhanded.
                    if (findResult)
                    {
                        current = currentEnumerator.Current;
                    }

                    // We're scanning subdirectories and this guy is invited to the party.
                    if (subdirectory)
                    {
                        PushState();
                    }
                }
                else if (!findResult)
                {
                    PopState();
                }
            } while (!findResult && !IsFinished);
            if (!findResult)
            {
                current = null;
            }
            return(findResult);
        }