. */ require_once 'phing/system/io/OutputStream.php'; require_once 'phing/system/io/PhingFile.php'; /** * Output stream subclass for file streams. * * @package phing.system.io */ class FileOutputStream extends OutputStream { /** * @var PhingFile The associated file. */ protected $file; /** * Construct a new FileOutputStream. * @param mixed $file * @param boolean $append Whether to append bytes to end of file rather than beginning. * @throws Exception - if invalid argument specified. * @throws IOException - if unable to open file. */ public function __construct($file, $append = false) { if ($file instanceof PhingFile) { $this->file = $file; } elseif (is_string($file)) { $this->file = new PhingFile($file); } else { throw new Exception("Invalid argument type for \$file."); } if ($append) { $stream = @fopen($this->file->getAbsolutePath(), "ab"); } else { $stream = @fopen($this->file->getAbsolutePath(), "wb"); } if ($stream === false) { throw new IOException("Unable to open " . $this->file->__toString() . " for writing: " . $php_errormsg); } parent::__construct($stream); } /** * Returns a string representation of the attached file. * @return string */ public function __toString() { return $this->file->getPath(); } }