Nette Documentation Preview

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

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


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

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

```shell
composer require nette/utils
```

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

```php
use Nette\Utils\FileSystem;
```


Manipulation .[#toc-manipulation]
=================================


copy(string $origin, string $target, bool $overwrite=true): void .[method]
--------------------------------------------------------------------------

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

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


createDir(string $directory, int $mode=0777): void .[method]
------------------------------------------------------------

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

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


delete(string $path): void .[method]
------------------------------------

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

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


makeWritable(string $path, int $dirMode=0777, int $fileMode=0666): void .[method]
---------------------------------------------------------------------------------

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

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


open(string $path, string $mode): resource .[method]
----------------------------------------------------

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

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


read(string $file): string .[method]
------------------------------------

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

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


readLines(string $file, bool $stripNewLines=true): \Generator .[method]
-----------------------------------------------------------------------

Διαβάζει το περιεχόμενο του αρχείου γραμμή προς γραμμή. Σε αντίθεση με την εγγενή συνάρτηση `file()`, δεν διαβάζει ολόκληρο το αρχείο στη μνήμη, αλλά το διαβάζει συνεχώς, έτσι ώστε να μπορούν να διαβαστούν αρχεία μεγαλύτερα από τη διαθέσιμη μνήμη. Το `$stripNewLines` καθορίζει αν θα αφαιρεθούν οι χαρακτήρες αλλαγής γραμμής `\r` και `\n`.
Σε περίπτωση σφάλματος, δημιουργεί μια εξαίρεση `Nette\IOException`.

```php
$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 .[method]
----------------------------------------------------------------------------

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

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


write(string $file, string $content, int $mode=0666): void .[method]
--------------------------------------------------------------------

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

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


Διαδρομές .[#toc-paths]
=======================


isAbsolute(string $path): bool .[method]
----------------------------------------

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

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


joinPaths(string ...$segments): string .[method]
------------------------------------------------
Ενώνει όλα τα τμήματα της διαδρομής και κανονικοποιεί το αποτέλεσμα.

```php
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 .[method]
---------------------------------------------
Κανονικοποιεί τα `..` και `.` και τα διαχωριστικά καταλόγων στη διαδρομή.

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


unixSlashes(string $path): string .[method]
-------------------------------------------

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

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


platformSlashes(string $path): string .[method]
-----------------------------------------------

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

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


Στατική έναντι μη στατικής προσέγγισης .[#toc-static-vs-non-static-approach]
============================================================================

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

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

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

	...
}
```

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

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(/* ... */);
	}

	...
}