Thanks to visit codestin.com
Credit goes to doc.nette.org

Dosya Sistemi

Nette\Utils\FileSystem, dosya sistemiyle çalışmak için yararlı fonksiyonlar içeren bir sınıftır. Yerel PHP fonksiyonlarına göre avantajlarından biri, hata durumunda istisnalar fırlatmasıdır.

Diskte dosya aramanız gerekiyorsa, Finder'ı kullanın.

Kurulum:

composer require nette/utils

Aşağıdaki örnekler, oluşturulmuş bir takma ad varsayar:

use Nette\Utils\FileSystem;

Manipülasyon

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

Bir dosyayı veya tüm dizini kopyalar. Varsayılan olarak mevcut dosyaları ve dizinleri üzerine yazar. $overwrite parametresi false olarak ayarlandığında, hedef dosya veya dizin $target mevcutsa Nette\InvalidStateException istisnası fırlatır. Hata durumunda Nette\IOException istisnası fırlatır.

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

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

Mevcut değilse, üst dizinler dahil olmak üzere bir dizin oluşturur. Hata durumunda Nette\IOException istisnası fırlatır.

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

delete (string $path): void

Mevcutsa bir dosyayı veya tüm dizini siler. Dizin boş değilse, önce içeriğini siler. Hata durumunda Nette\IOException istisnası fırlatır.

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

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

Dosya izinlerini $fileMode veya dizin izinlerini $dirMode olarak ayarlar. Özyinelemeli olarak geçer ve dizinin tüm içeriğinin izinlerini de ayarlar.

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

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

Bir dosyayı açar ve kaynağı döndürür. $mode parametresi, yerel fopen() fonksiyonundaki gibi çalışır. Hata durumunda Nette\IOException istisnası fırlatır.

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

read (string $file): string

$file dosyasının içeriğini döndürür. Hata durumunda Nette\IOException istisnası fırlatır.

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

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

Dosyanın içeriğini satır satır okur. Yerel file() fonksiyonunun aksine, tüm dosyayı belleğe yüklemez, ancak sürekli olarak okur, bu nedenle mevcut bellekten daha büyük dosyaları okumak mümkündür. $stripNewLines, satır sonu karakterleri \r ve \n'nin kaldırılıp kaldırılmayacağını belirtir. Hata durumunda Nette\IOException istisnası fırlatır.

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

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

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

$origin dosyasını veya dizinini yeniden adlandırır veya taşır. Varsayılan olarak mevcut dosyaları ve dizinleri üzerine yazar. $overwrite parametresi false olarak ayarlandığında, hedef dosya veya dizin $target mevcutsa Nette\InvalidStateException istisnası fırlatır. Hata durumunda Nette\IOException istisnası fırlatır.

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

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

$content karakter dizisini $file dosyasına yazar. Hata durumunda Nette\IOException istisnası fırlatır.

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

Yollar

isAbsolute (string $path)bool

$path yolunun mutlak olup olmadığını kontrol eder.

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

joinPaths (string …$segments)string

Yolun tüm segmentlerini birleştirir ve sonucu normalleştirir.

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

Yoldaki .. ve . ve dizin ayırıcılarını sistem ayırıcılarına normalleştirir.

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

unixSlashes (string $path)string

Eğik çizgileri Unix sistemlerinde kullanılan / karakterine dönüştürür.

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

platformSlashes (string $path)string

Eğik çizgileri geçerli platforma özgü karakterlere dönüştürür, yani Windows'ta \ ve diğerlerinde /.

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

resolvePath (string $basePath, string $path)string

$path yolundan temel dizin $basePath'e göre son yolu türetir. Mutlak yolları (/foo, C:/foo) değiştirmeden bırakır (yalnızca eğik çizgileri normalleştirir), göreli yolları temel yola ekler.

// Windows'ta çıktıdaki eğik çizgiler ters olurdu (\)
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'

Statik vs Statik Olmayan Erişim

Örneğin test amacıyla sınıfı kolayca başka bir sınıfla (mock ile) değiştirebilmek için statik olmayan şekilde kullanın:

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

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

	...
}
versiyon: 4.0