/** * Get file iterator of current dir. * * @param boolean $recursive True to resursive. * * @return \FilesystemIterator|\RecursiveIteratorIterator File & dir iterator. */ public function getIterator($recursive = false) { // If we put this object into a foreach, return all files and folders to iterator. return Filesystem::items((string) $this, $recursive); }
/** * items * * @param string $path * @param boolean $recursive * @param integer $pathType * * @return array */ public static function items($path, $recursive = false, $pathType = self::PATH_ABSOLUTE) { $files = array(); $pathLength = strlen($path); /** @var $file \SplFileInfo */ foreach (Filesystem::items($path, $recursive) as $file) { switch ($pathType) { case $pathType === self::PATH_BASENAME: $name = $file->getBasename(); break; case $pathType === static::PATH_RELATIVE: $pathLength = strlen($path); $name = $file->getRealPath(); $name = trim(substr($name, $pathLength), DIRECTORY_SEPARATOR); break; case $pathType === static::PATH_ABSOLUTE: default: $name = $file->getPathname(); break; } $files[] = $name; } return $files; }
/** * Method to test items(). * * @return void * * @covers Windwalker\Filesystem\Filesystem::items */ public function testItems() { $items = Filesystem::items(static::$dest . '/folder1/level2', true, true); $this->assertEquals(FilesystemTestHelper::cleanPaths(array(static::$dest . '/folder1/level2/file3')), FilesystemTestHelper::cleanPaths($items)); // Recursive $items = Filesystem::items(static::$dest, true, true); $compare = FilesystemTestHelper::getItemsRecursive('dest'); $this->assertEquals(FilesystemTestHelper::cleanPaths($compare), FilesystemTestHelper::cleanPaths($items)); // Iterator $items = Filesystem::items(static::$dest, true); $this->assertInstanceOf('CallbackFilterIterator', $items); $items2 = Filesystem::iteratorToArray($items); $this->assertEquals(FilesystemTestHelper::cleanPaths($compare), FilesystemTestHelper::cleanPaths($items2)); $items->rewind(); $this->assertInstanceOf('SplFileinfo', $items->current()); }