getMode(), $createModes)) { throw new Exception( 'Open mode are not supported; given %d. Only %s are supported.', 0, [$this->getMode(), implode(', ', $createModes)] ); } preg_match('#^(\w+)://#', $streamName, $match); if (((isset($match[1]) && $match[1] == 'file') || !isset($match[1])) && !file_exists($streamName)) { throw new Exception\FileDoesNotExist( 'File %s does not exist.', 1, $streamName ); } $out = parent::_open($streamName, $context); return $out; } /** * Test for end-of-file. * * @return bool */ public function eof() { return feof($this->getStream()); } /** * Read n characters. * * @param int $length Length. * @return string * @throws \Hoa\File\Exception */ public function read($length) { if (0 > $length) { throw new Exception( 'Length must be greater than 0, given %d.', 2, $length ); } return fread($this->getStream(), $length); } /** * Alias of $this->read(). * * @param int $length Length. * @return string */ public function readString($length) { return $this->read($length); } /** * Read a character. * * @return string */ public function readCharacter() { return fgetc($this->getStream()); } /** * Read a boolean. * * @return bool */ public function readBoolean() { return (bool) $this->read(1); } /** * Read an integer. * * @param int $length Length. * @return int */ public function readInteger($length = 1) { return (int) $this->read($length); } /** * Read a float. * * @param int $length Length. * @return float */ public function readFloat($length = 1) { return (float) $this->read($length); } /** * Read an array. * Alias of the $this->scanf() method. * * @param string $format Format (see printf's formats). * @return array */ public function readArray($format = null) { return $this->scanf($format); } /** * Read a line. * * @return string */ public function readLine() { return fgets($this->getStream()); } /** * Read all, i.e. read as much as possible. * * @param int $offset Offset. * @return string */ public function readAll($offset = 0) { return stream_get_contents($this->getStream(), -1, $offset); } /** * Parse input from a stream according to a format. * * @param string $format Format (see printf's formats). * @return array */ public function scanf($format) { return fscanf($this->getStream(), $format); } }