Hi,
        Having trouble writing a RecursiveFilterIterator to exclude linked 
directories from the recursive listing..

class DXLinkDirectoryRecursiveFilter extends RecursiveFilterIterator
{
        function accept() { return TRUE; }
}

interface DXDirectoryVisitor
{
        function visit(DirectoryIterator $file);
}

class DXDirectory
{
        const FILES_FIRST = RecursiveIteratorIterator::CHILD_FIRST;
        const FILES_ONLY = RecursiveIteratorIterator::LEAVES_ONLY;
        const DIR_FIRST = RecursiveIteratorIterator::SELF_FIRST;

        private $directory;

        function __construct($directory)
        {
                $this->directory = $directory;
        }


        function forEvery(DXDirectoryVisitor $visitor, $mode = self::DIR_FIRST)
        {
                $r = file_exists($this->directory);
                if ($r)
                {
                        $directoryIterator = new 
RecursiveDirectoryIterator($this->directory);
                        $directoryIterator = new 
DXLinkDirectoryRecursiveFilter($directoryIterator);
                        $recursiveIteratorIterator = new 
RecursiveIteratorIterator($directoryIterator, $mode);
                        foreach($recursiveIteratorIterator as $i)
                        {
                                if (!$i->isDot())
                                        $r = $r && $visitor->visit($i);
                        }
                }
                return $r;
        }
}

class DXDirEcho implements DXDirectoryVisitor
{
        function visit(DirectoryIterator $dir)
        {
                echo $dir->getPathname(), "\n";
                return TRUE;
        }
}


$d = new DXDirectory('somedirectory');
$d->forEvery(new DXDirEcho());

The filter shouldn't be doing anything, according to my understanding, but its 
filtering out all files in any of the subdirectories.

Jared

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to