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) && parent::MODE_TRUNCATE_WRITE == $this->getMode()) { throw new Exception\FileDoesNotExist( 'File %s does not exist.', 1, $streamName ); } $out = parent::_open($streamName, $context); return $out; } /** * Write n characters. * * @param string $string String. * @param int $length Length. * @return mixed * @throws \Hoa\File\Exception */ public function write($string, $length) { if (0 > $length) { throw new Exception( 'Length must be greater than 0, given %d.', 2, $length ); } return fwrite($this->getStream(), $string, $length); } /** * Write a string. * * @param string $string String. * @return mixed */ public function writeString($string) { $string = (string) $string; return $this->write($string, strlen($string)); } /** * Write a character. * * @param string $char Character. * @return mixed */ public function writeCharacter($char) { return $this->write((string) $char[0], 1); } /** * Write a boolean. * * @param bool $boolean Boolean. * @return mixed */ public function writeBoolean($boolean) { return $this->write((string) (bool) $boolean, 1); } /** * Write an integer. * * @param int $integer Integer. * @return mixed */ public function writeInteger($integer) { $integer = (string) (int) $integer; return $this->write($integer, strlen($integer)); } /** * Write a float. * * @param float $float Float. * @return mixed */ public function writeFloat($float) { $float = (string) (float) $float; return $this->write($float, strlen($float)); } /** * Write an array. * * @param array $array Array. * @return mixed */ public function writeArray(array $array) { $array = var_export($array, true); return $this->write($array, strlen($array)); } /** * Write a line. * * @param string $line Line. * @return mixed */ public function writeLine($line) { if (false === $n = strpos($line, "\n")) { return $this->write($line . "\n", strlen($line) + 1); } ++$n; return $this->write(substr($line, 0, $n), $n); } /** * Write all, i.e. as much as possible. * * @param string $string String. * @return mixed */ public function writeAll($string) { return $this->write($string, strlen($string)); } /** * Truncate a file to a given length. * * @param int $size Size. * @return bool */ public function truncate($size) { return ftruncate($this->getStream(), $size); } }