Dateisystem-Funktionen

Nette\Utils\FileSystem ist eine Klasse, die nützliche Funktionen für die Arbeit mit einem Dateisystem enthält. Ein Vorteil gegenüber nativen PHP-Funktionen ist, dass sie im Fehlerfall Ausnahmen auslösen.

Wenn Sie nach Dateien auf dem Datenträger suchen müssen, verwenden Sie den Finder.

Installation:

composer require nette/utils

Die folgenden Beispiele gehen davon aus, dass der folgende Klassenalias definiert ist:

use Nette\Utils\FileSystem;

Manipulation

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

Kopiert eine Datei oder ein ganzes Verzeichnis. Überschreibt standardmäßig vorhandene Dateien und Verzeichnisse. Wenn $overwrite auf false gesetzt ist und ein $target bereits existiert, wird eine Exception Nette\InvalidStateException geworfen. Löst eine Exception Nette\IOException aus, wenn ein Fehler auftritt.

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

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

Erstellt ein Verzeichnis, wenn es nicht existiert, einschließlich übergeordneter Verzeichnisse. Wirft eine Exception Nette\IOException wenn ein Fehler auftritt.

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

delete (string $path): void

Löscht eine Datei oder ein ganzes Verzeichnis, falls vorhanden. Wenn das Verzeichnis nicht leer ist, wird zuerst sein Inhalt gelöscht. Wirft eine Exception Nette\IOException wenn ein Fehler auftritt.

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

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

Setzt die Dateiberechtigungen auf $fileMode oder die Verzeichnisberechtigungen auf $dirMode. Durchläuft rekursiv den gesamten Inhalt des Verzeichnisses und setzt die Berechtigungen auch für diesen.

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

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

Öffnet die Datei und gibt die Ressource zurück. Der Parameter $mode funktioniert genauso wie die native Funktion fopen(). Wenn ein Fehler auftritt, wird die Ausnahme Nette\IOException ausgelöst.

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

read (string $file): string

Liest den Inhalt einer $file. Bei Auftreten eines Fehlers wird die Ausnahme Nette\IOException ausgelöst.

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

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

Liest den Inhalt der Datei Zeile für Zeile. Im Gegensatz zur nativen Funktion file() wird nicht die gesamte Datei in den Speicher eingelesen, sondern kontinuierlich, so dass auch Dateien gelesen werden können, die größer als der verfügbare Speicher sind. Der Parameter $stripNewLines gibt an, ob die Zeilenumbruchzeichen \r und \n entfernt werden sollen. Im Falle eines Fehlers löst sie eine Nette\IOException Ausnahme aus.

$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

Benennt eine durch $origin angegebene Datei oder ein Verzeichnis um oder verschiebt sie/es nach $target. Überschreibt standardmäßig vorhandene Dateien und Verzeichnisse. Wenn $overwrite auf false gesetzt ist und $target bereits existiert, wird eine Ausnahme Nette\InvalidStateException geworfen. Wirft eine Exception Nette\IOException, wenn ein Fehler auftritt.

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

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

Schreibt die $content in eine $file. Bei einem Fehler wird die Ausnahme Nette\IOException ausgelöst.

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

Pfade

isAbsolute (string $path)bool

Bestimmt, ob die $path absolut ist.

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

joinPaths (string …$segments)string

Verbindet alle Segmente des Pfades und normalisiert das Ergebnis.

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

Normalisiert .. und . sowie die Verzeichnistrennzeichen im Pfad.

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

unixSlashes (string $path)string

Wandelt Schrägstriche in / um, die auf Unix-Systemen verwendet werden.

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

platformSlashes (string $path)string

Konvertiert Schrägstriche in Zeichen, die für die aktuelle Plattform spezifisch sind, d. h. \ unter Windows und / anderswo.

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

Statischer vs. nicht-statischer Ansatz

Um die Klasse FileSystem einfach durch eine andere Klasse zu ersetzen, z. B. zu Testzwecken, verwenden Sie sie nicht-statisch:

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

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

	...
}
Version: 4.0