Λειτουργίες συστήματος αρχείων

Nette\Utils\FileSystem είναι μια κλάση, η οποία περιέχει χρήσιμες λειτουργίες για την εργασία με ένα σύστημα αρχείων. Ένα πλεονέκτημα σε σχέση με τις εγγενείς συναρτήσεις της PHP είναι ότι σε περίπτωση σφαλμάτων πετάνε εξαιρέσεις.

Αν θέλετε να αναζητήσετε αρχεία στο δίσκο, χρησιμοποιήστε το Finder.

Εγκατάσταση:

composer require nette/utils

Τα ακόλουθα παραδείγματα υποθέτουν ότι έχει οριστεί το ακόλουθο ψευδώνυμο κλάσης:

use Nette\Utils\FileSystem;

Manipulation

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

Αντιγράφει ένα αρχείο ή έναν ολόκληρο κατάλογο. Αντικαθιστά τα υπάρχοντα αρχεία και καταλόγους από προεπιλογή. Εάν το $overwrite έχει οριστεί σε false και ένα $target υπάρχει ήδη, δημιουργεί μια εξαίρεση Nette\InvalidStateException. Πετάει μια εξαίρεση Nette\IOException σε περίπτωση σφάλματος.

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

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

Δημιουργεί έναν κατάλογο αν δεν υπάρχει, συμπεριλαμβανομένων των γονικών καταλόγων. Πετάει μια εξαίρεση Nette\IOException σε περίπτωση σφάλματος.

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

delete(string $path): void

Διαγράφει ένα αρχείο ή έναν ολόκληρο κατάλογο αν υπάρχει. Εάν ο κατάλογος δεν είναι άδειος, διαγράφει πρώτα τα περιεχόμενά του. Πετάει μια εξαίρεση Nette\IOException σε περίπτωση σφάλματος.

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

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

Ορίζει δικαιώματα αρχείων στο $fileMode ή δικαιώματα καταλόγων στο $dirMode. Διατρέχει αναδρομικά και θέτει δικαιώματα και σε όλα τα περιεχόμενα του καταλόγου.

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

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

Ανοίγει το αρχείο και επιστρέφει τον πόρο. Η παράμετρος $mode λειτουργεί όπως η εγγενής συνάρτηση fopen(). Εάν προκύψει σφάλμα, δημιουργεί την εξαίρεση Nette\IOException.

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

read(string $file): string

Διαβάζει το περιεχόμενο ενός $file. Εκπέμπει εξαίρεση Nette\IOException σε περίπτωση σφάλματος.

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

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

Διαβάζει το περιεχόμενο του αρχείου γραμμή προς γραμμή. Σε αντίθεση με την εγγενή συνάρτηση file(), δεν διαβάζει ολόκληρο το αρχείο στη μνήμη, αλλά το διαβάζει συνεχώς, έτσι ώστε να μπορούν να διαβαστούν αρχεία μεγαλύτερα από τη διαθέσιμη μνήμη. Το $stripNewLines καθορίζει αν θα αφαιρεθούν οι χαρακτήρες αλλαγής γραμμής \r και \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

Μετονομάζει ή μετακινεί ένα αρχείο ή έναν κατάλογο που καθορίζεται από το $origin στο $target. Αντικαθιστά τα υπάρχοντα αρχεία και καταλόγους από προεπιλογή. Εάν το $overwrite έχει οριστεί σε false και το $target υπάρχει ήδη, προκαλεί εξαίρεση Nette\InvalidStateException. Πετάει εξαίρεση Nette\IOException σε περίπτωση σφάλματος.

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

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

Γράφει το $content σε ένα $file. Πετάει μια εξαίρεση Nette\IOException σε περίπτωση σφάλματος.

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

Διαδρομές

isAbsolute(string $path)bool

Καθορίζει αν το $path είναι απόλυτο.

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

joinPaths(string …$segments)string

Ενώνει όλα τα τμήματα της διαδρομής και κανονικοποιεί το αποτέλεσμα.

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

Κανονικοποιεί τα .. και . και τα διαχωριστικά καταλόγων στη διαδρομή.

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

unixSlashes(string $path)string

Μετατρέπει τις κάθετες γραμμές σε / που χρησιμοποιούνται στα συστήματα Unix.

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

platformSlashes(string $path)string

Μετατρέπει τις κάθετες γραμμές σε χαρακτήρες συγκεκριμένους για την τρέχουσα πλατφόρμα, δηλ. \ στα Windows και / αλλού.

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

Στατική έναντι μη στατικής προσέγγισης

Για να αντικαταστήσετε εύκολα την κλάση FileSystem με μια άλλη κλάση, για παράδειγμα για σκοπούς δοκιμών, χρησιμοποιήστε τη μη στατική:

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

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

	...
}
έκδοση: 4.0