Funciones del sistema de archivos

Nette\Utils\FileSystem es una clase que contiene funciones útiles para trabajar con un sistema de archivos. Una ventaja sobre las funciones nativas de PHP es que lanzan excepciones en caso de errores.

Si necesitas buscar archivos en el disco, utiliza el Finder.

Instalación:

composer require nette/utils

Los siguientes ejemplos asumen que el siguiente alias de clase está definido:

use Nette\Utils\FileSystem;

Manipulación

copy(string $origin, string $target, bool $overwrite=true)void

Copia un archivo o un directorio completo. Sobrescribe los archivos y directorios existentes por defecto. Si $overwrite se establece en false y ya existe un $target, lanza una excepción Nette\InvalidStateException. Lanza una excepción Nette\IOException en caso de error.

FileSystem::copy('/path/to/source', '/path/to/dest', overwrite: true);

createDir(string $directory, int $mode=0777)void

Crea un directorio si no existe, incluyendo los directorios padre. Lanza una excepción Nette\IOException en caso de error.

FileSystem::createDir('/path/to/dir');

delete(string $path): void

Borra un fichero o un directorio entero si existe. Si el directorio no está vacío, borra primero su contenido. Lanza una excepción Nette\IOException en caso de error.

FileSystem::delete('/path/to/fileOrDir');

makeWritable(string $path, int $dirMode=0777, int $fileMode=0666)void

Establece los permisos de archivo a $fileMode o los permisos de directorio a $dirMode. Recursivamente recorre y establece permisos en todo el contenido del directorio también.

FileSystem::makeWritable('/path/to/fileOrDir');

open(string $path, string $mode): resource

Abre el archivo y devuelve el recurso. El parámetro $mode funciona igual que la función nativa fopen(). Si se produce un error, lanza la excepción Nette\IOException.

$res = FileSystem::open('/path/to/file', 'r');

read(string $file): string

Lee el contenido de un $file. Lanza una excepción Nette\IOException si se produce un error.

$content = FileSystem::read('/path/to/file');

readLines(string $file, bool $stripNewLines=true): \Generator

Lee el contenido del fichero línea a línea. A diferencia de la función nativa file(), no lee todo el fichero en memoria, sino que lo lee de forma continua, de modo que se pueden leer ficheros mayores que la memoria disponible. $stripNewLines especifica si se eliminan los caracteres de salto de línea de \r y \n. En caso de error, lanza una excepción Nette\IOException.

$lines = FileSystem::readLines('/path/to/file');

foreach ($lines as $lineNum => $line) {
	echo "Line $lineNum: $line\n";
}

rename(string $origin, string $target, bool $overwrite=true)void

Renombra o mueve un archivo o un directorio especificado por $origin a $target. Sobrescribe los archivos y directorios existentes por defecto. Si $overwrite se establece en false y $target ya existe, lanza una excepción Nette\InvalidStateException. Lanza una excepción Nette\IOException en caso de error.

FileSystem::rename('/path/to/source', '/path/to/dest', overwrite: true);

write(string $file, string $content, int $mode=0666)void

Escribe $content en $file. Lanza una excepción Nette\IOException si se produce un error.

FileSystem::write('/path/to/file', $content);

Rutas

isAbsolute(string $path)bool

Determina si la dirección $path es absoluta.

FileSystem::isAbsolute('../backup'); // false
FileSystem::isAbsolute('/backup');   // true
FileSystem::isAbsolute('C:/backup'); // true

joinPaths(string …$segments)string

Une todos los segmentos de la ruta y normaliza el resultado.

FileSystem::joinPaths('a', 'b', 'file.txt'); // 'a/b/file.txt'
FileSystem::joinPaths('/a/', '/b/');         // '/a/b/'
FileSystem::joinPaths('/a/', '/../b');       // '/b'

normalizePath(string $path)string

Normaliza .. y . y los separadores de directorio de la ruta.

FileSystem::normalizePath('/file/.');        // '/file/'
FileSystem::normalizePath('\file\..');       // '/file'
FileSystem::normalizePath('/file/../..');    // '/..'
FileSystem::normalizePath('file/../../bar'); // '/../bar'

unixSlashes(string $path)string

Convierte las barras oblicuas en / utilizadas en los sistemas Unix.

$path = FileSystem::unixSlashes($path);

platformSlashes(string $path)string

Convierte las barras inclinadas en caracteres específicos de la plataforma actual, es decir, \ en Windows y / en otros sistemas.

$path = FileSystem::platformSlashes($path);

Enfoque estático frente a no estático

Para reemplazar fácilmente la clase FileSystem por otra clase, por ejemplo para realizar pruebas, utilícela de forma no estática:

class AnyClassUsingFileSystem
{
	public function __construct(
		private FileSystem $fileSystem,
	) {
	}

	public function readConfig(): string
	{
		return $this->fileSystem->read(/* ... */);
	}

	...
}
versión: 4.0