function testReadWritePipe() { $original_value = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'Mock' . DIRECTORY_SEPARATOR . 'mockfile.txt'); $file = new \qio\File(__DIR__ . DIRECTORY_SEPARATOR . 'Mock' . DIRECTORY_SEPARATOR . 'mockfile.txt'); $file2 = new \qio\File(__DIR__ . DIRECTORY_SEPARATOR . 'Mock' . DIRECTORY_SEPARATOR . 'mockfile2.txt'); $source = new \qio\File\Stream($file, \qio\Stream\Mode::Read); $target = new \qio\File\Stream($file2, \qio\Stream\Mode::ReadWriteTruncate); $reader = new \qio\File\Reader($source); $writer = new \qio\File\Writer($target); $source->open(); $target->open(); $reader->pipe($writer); $source->close(); $target->close(); $new_value = file_get_contents(__DIR__ . DIRECTORY_SEPARATOR . 'Mock' . DIRECTORY_SEPARATOR . 'mockfile2.txt'); $this->assertEquals($original_value, $new_value); }
/** * Helper method to perform save sequence * @param string $path * @param string $target * @throws \InvalidArgumentException */ protected function commit($path, $target = null) { if (is_array($path) && is_null($target)) { foreach ($path as $k => $v) { $this->commit($k, $v); } return; } elseif (!is_string($path) || !is_string($target)) { throw new \InvalidArgumentException(); } $fileStream = new \qio\File\Stream($path); $fileReader = new \qio\File\Reader($fileStream); if (!$fileStream->open()) { return; } $cacheData = $fileReader->readAll(); $fileStream->close(); if (!empty(trim($cacheData))) { $fileStream = new \qio\File\Stream($target, \qio\Stream\Mode::ReadWriteTruncate); $fileWriter = new \qio\File\Writer($fileStream); if (!$fileStream->open()) { return; } $fileWriter->write($cacheData); $fileStream->close(); } }