Nette Documentation Preview

syntax
Datotečni sistem
****************

.[perex]
[api:Nette\Utils\FileSystem] je razred z uporabnimi funkcijami za delo z datotečnim sistemom. Ena od prednosti v primerjavi z izvornimi PHP funkcijami je, da v primeru napake sprožijo izjeme.


Če potrebujete iskati datoteke na disku, uporabite [Finder |finder].

Namestitev:

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

Naslednji primeri predpostavljajo ustvarjen vzdevek:

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


Manipulacija
============


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

Kopira datoteko ali celoten imenik. Privzeto prepiše obstoječe datoteke in imenike. S parametrom `$overwrite`, nastavljenim na vrednost `false`, sproži izjemo `Nette\InvalidStateException`, če ciljna datoteka ali imenik `$target` obstaja. Ob napaki sproži izjemo `Nette\IOException`.

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


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

Ustvari imenik, če ne obstaja, vključno z nadrejenimi imeniki. Ob napaki sproži izjemo `Nette\IOException`.

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


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

Izbriše datoteko ali celoten imenik, če obstaja. Če imenik ni prazen, najprej izbriše njegovo vsebino. Ob napaki sproži izjemo `Nette\IOException`.

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


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

Nastavi dovoljenja datoteke na `$fileMode` ali imenika na `$dirMode`. Rekurzivno preide in nastavi dovoljenja tudi celotni vsebini imenika.

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


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

Odpre datoteko in vrne vir (resource). Parameter `$mode` deluje enako kot pri izvorni funkciji `fopen()`:https://www.php.net/manual/en/function.fopen.php. V primeru napake sproži izjemo `Nette\IOException`.

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


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

Vrne vsebino datoteke `$file`. Ob napaki sproži izjemo `Nette\IOException`.

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


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

Prebere vsebino datoteke vrstico po vrstico. Za razliko od izvorne funkcije `file()` ne naloži celotne datoteke v pomnilnik, ampak jo bere sproti, tako da je mogoče brati tudi datoteke, večje od razpoložljivega pomnilnika. `$stripNewLines` pove, ali naj se odstranijo znaki konca vrstice `\r` in `\n`. V primeru napake sproži izjemo `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]
----------------------------------------------------------------------------

Preimenuje ali premakne datoteko ali imenik `$origin`. Privzeto prepiše obstoječe datoteke in imenike. S parametrom `$overwrite`, nastavljenim na vrednost `false`, sproži izjemo `Nette\InvalidStateException`, če ciljna datoteka ali imenik `$target` obstaja. Ob napaki sproži izjemo `Nette\IOException`.

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


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

Zapiše niz `$content` v datoteko `$file`. Ob napaki sproži izjemo `Nette\IOException`.

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


Poti
====


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

Ugotavlja, ali je pot `$path` absolutna.

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


joinPaths(string ...$segments): string .[method]
------------------------------------------------
Združi vse segmente poti in rezultat normalizira.

```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]
---------------------------------------------
Normalizira `..` in `.` ter ločila imenikov v poti na sistemska.

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


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

Pretvori poševnice v `/`, ki se uporabljajo v sistemih Unix.

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


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

Pretvori poševnice v znake, specifične za trenutno platformo, tj. `\` v Windows in `/` drugje.

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


resolvePath(string $basePath, string $path): string .[method]{data-version:4.0.6}
---------------------------------------------------------------------------------

Izpelje končno pot iz poti `$path` glede na osnovni imenik `$basePath`. Absolutne poti (`/foo`, `C:/foo`) pusti nespremenjene (samo normalizira poševnice), relativne poti pripne k osnovni poti.

```php
// V Windows bi bile poševnice v izpisu obrnjene (\)
FileSystem::resolvePath('/base/dir', '/abs/path');      // '/abs/path'
FileSystem::resolvePath('/base/dir', 'rel');            // '/base/dir/rel'
FileSystem::resolvePath('base/dir', '../file.txt');     // 'base/file.txt'
FileSystem::resolvePath('base', '');                    // 'base'
```


Statični vs nestatični pristop
==============================

Da bi lahko na primer za namene testiranja razred enostavno nadomestili z drugim (mock), ga uporabljajte nestatično:

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

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

	...
}
```

Datotečni sistem

Nette\Utils\FileSystem je razred z uporabnimi funkcijami za delo z datotečnim sistemom. Ena od prednosti v primerjavi z izvornimi PHP funkcijami je, da v primeru napake sprožijo izjeme.

Če potrebujete iskati datoteke na disku, uporabite Finder.

Namestitev:

composer require nette/utils

Naslednji primeri predpostavljajo ustvarjen vzdevek:

use Nette\Utils\FileSystem;

Manipulacija

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

Kopira datoteko ali celoten imenik. Privzeto prepiše obstoječe datoteke in imenike. S parametrom $overwrite, nastavljenim na vrednost false, sproži izjemo Nette\InvalidStateException, če ciljna datoteka ali imenik $target obstaja. Ob napaki sproži izjemo Nette\IOException.

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

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

Ustvari imenik, če ne obstaja, vključno z nadrejenimi imeniki. Ob napaki sproži izjemo Nette\IOException.

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

delete(string $path): void

Izbriše datoteko ali celoten imenik, če obstaja. Če imenik ni prazen, najprej izbriše njegovo vsebino. Ob napaki sproži izjemo Nette\IOException.

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

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

Nastavi dovoljenja datoteke na $fileMode ali imenika na $dirMode. Rekurzivno preide in nastavi dovoljenja tudi celotni vsebini imenika.

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

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

Odpre datoteko in vrne vir (resource). Parameter $mode deluje enako kot pri izvorni funkciji fopen(). V primeru napake sproži izjemo Nette\IOException.

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

read(string $file): string

Vrne vsebino datoteke $file. Ob napaki sproži izjemo Nette\IOException.

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

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

Prebere vsebino datoteke vrstico po vrstico. Za razliko od izvorne funkcije file() ne naloži celotne datoteke v pomnilnik, ampak jo bere sproti, tako da je mogoče brati tudi datoteke, večje od razpoložljivega pomnilnika. $stripNewLines pove, ali naj se odstranijo znaki konca vrstice \r in \n. V primeru napake sproži izjemo 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

Preimenuje ali premakne datoteko ali imenik $origin. Privzeto prepiše obstoječe datoteke in imenike. S parametrom $overwrite, nastavljenim na vrednost false, sproži izjemo Nette\InvalidStateException, če ciljna datoteka ali imenik $target obstaja. Ob napaki sproži izjemo Nette\IOException.

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

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

Zapiše niz $content v datoteko $file. Ob napaki sproži izjemo Nette\IOException.

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

Poti

isAbsolute(string $path)bool

Ugotavlja, ali je pot $path absolutna.

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

joinPaths(string …$segments)string

Združi vse segmente poti in rezultat normalizira.

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

Normalizira .. in . ter ločila imenikov v poti na sistemska.

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

unixSlashes(string $path)string

Pretvori poševnice v /, ki se uporabljajo v sistemih Unix.

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

platformSlashes(string $path)string

Pretvori poševnice v znake, specifične za trenutno platformo, tj. \ v Windows in / drugje.

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

resolvePath(string $basePath, string $path)string

Izpelje končno pot iz poti $path glede na osnovni imenik $basePath. Absolutne poti (/foo, C:/foo) pusti nespremenjene (samo normalizira poševnice), relativne poti pripne k osnovni poti.

// V Windows bi bile poševnice v izpisu obrnjene (\)
FileSystem::resolvePath('/base/dir', '/abs/path');      // '/abs/path'
FileSystem::resolvePath('/base/dir', 'rel');            // '/base/dir/rel'
FileSystem::resolvePath('base/dir', '../file.txt');     // 'base/file.txt'
FileSystem::resolvePath('base', '');                    // 'base'

Statični vs nestatični pristop

Da bi lahko na primer za namene testiranja razred enostavno nadomestili z drugim (mock), ga uporabljajte nestatično:

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

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

	...
}