3 namespace Cli\Services;
4 use RecursiveDirectoryIterator;
5 use RecursiveIteratorIterator;
10 public static function move(string $src, string $target): void
12 static::copy($src, $target);
16 public static function copy(string $src, string $target): void
20 /** @var RecursiveDirectoryIterator $files */
21 $files = new RecursiveIteratorIterator(
22 new RecursiveDirectoryIterator($src, RecursiveDirectoryIterator::SKIP_DOTS),
23 RecursiveIteratorIterator::SELF_FIRST
26 /** @var \SplFileInfo $fileinfo */
27 foreach ($files as $fileinfo) {
28 $srcPath = $fileinfo->getRealPath();
29 $subPath = $files->getSubPathName();
30 $destPath = Paths::join($target, $subPath);
31 if ($fileinfo->isDir()) {
32 $result = mkdir($destPath);
34 $result = copy($srcPath, $destPath);
37 if ($result === false) {
38 throw new \Exception("Failed to copy file or directory from {$srcPath} to {$destPath}");
43 public static function delete(string $dir): void
45 $files = new RecursiveIteratorIterator(
46 new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
47 RecursiveIteratorIterator::CHILD_FIRST
50 foreach ($files as $fileinfo) {
51 $path = $fileinfo->getRealPath();
52 if ($fileinfo->isDir()) {
53 $result = rmdir($path);
55 $result = unlink($path);
58 if ($result === false) {
59 throw new \Exception("Failed to delete file or directory at {$path}");