Elixir - Dosya GÇ
Dosya IO, dilin dosya sistemindeki dosyalarla etkileşime girmesine izin verdiği için herhangi bir programlama dilinin ayrılmaz bir parçasıdır. Bu bölümde, iki modülü tartışacağız - Yol ve Dosya.
Yol Modülü
pathmodül, dosya sistemi işlemleri için yardımcı bir modül olarak düşünülebilecek çok küçük bir modüldür. Dosya modülündeki işlevlerin çoğu, yolları bağımsız değişken olarak bekler. En yaygın olarak, bu yollar normal ikili dosyalar olacaktır. Yol modülü, bu tür yollarla çalışmak için kolaylıklar sağlar. Path modülü, farklı işletim sistemlerini şeffaf bir şekilde ele aldığından, yalnızca ikili dosyaları değiştirmek yerine Path modülündeki işlevleri kullanmak tercih edilir. Elixir'in dosya işlemleri gerçekleştirirken Windows'ta eğik çizgileri (/) ters eğik çizgilere (\) otomatik olarak dönüştürebileceği gözlemlenecektir.
Yol modülünü daha iyi anlamak için aşağıdaki örneği ele alalım -
IO.puts(Path.join("foo", "bar"))
Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu verir -
foo/bar
Yol modülünün sağladığı birçok yöntem vardır. Burada farklı yöntemlere bir göz atabilirsiniz . Bu yöntemler, birçok dosya işleme işlemi gerçekleştiriyorsanız sıklıkla kullanılır.
Dosya Modülü
Dosya modülü, dosyaları IO cihazları olarak açmamızı sağlayan işlevler içerir. Varsayılan olarak dosyalar ikili modda açılır ve geliştiricilerin belirliIO.binread ve IO.binwriteIO modülünden fonksiyonlar. Adlı bir dosya oluşturalımnewfile ve ona bazı veriler yazın.
{:ok, file} = File.read("newfile", [:write])
# Pattern matching to store returned stream
IO.binwrite(file, "This will be written to the file")
Az önce yazdığımız dosyayı açmaya giderseniz, içerik şu şekilde görüntülenecektir -
This will be written to the file
Şimdi dosya modülünün nasıl kullanılacağını anlayalım.
Bir dosyayı açmak
Bir dosyayı açmak için aşağıdaki 2 işlevden herhangi birini kullanabiliriz -
{:ok, file} = File.open("newfile")
file = File.open!("newfile")
Şimdi arasındaki farkı anlayalım File.open fonksiyon ve File.open!() işlevi.
File.openişlev her zaman bir demet döndürür. Dosya başarıyla açılırsa, dizideki ilk değeri şu şekilde döndürür::okve ikinci değer io_device türünün değişmez değeridir. Bir hataya neden olursa, ilk değeri olan bir demet döndürür::error ve sebep olarak ikinci değer.
File.open!() işlev ise bir io_devicedosya başarılı bir şekilde açılırsa, bir hata oluşturacaktır. NOT: Bu, tartışacağımız tüm dosya modülü işlevlerinde izlenen kalıptır.
Bu dosyayı açmak istediğimiz modları da belirtebiliriz. Bir dosyayı salt okunur olarak ve utf-8 kodlama modunda açmak için aşağıdaki kodu kullanıyoruz -
file = File.open!("newfile", [:read, :utf8])
Dosyaya Yazmak
Dosyalara yazmanın iki yolu var. Dosya modülünden yazma işlevini kullanan ilkini görelim.
File.write("newfile", "Hello")
Ancak aynı dosyaya birden çok yazma işlemi yapıyorsanız bu kullanılmamalıdır. Bu işlev her çalıştırıldığında, bir dosya tanımlayıcısı açılır ve dosyaya yazmak için yeni bir işlem başlatılır. Bir döngüde birden fazla yazma yapıyorsanız, dosyayı şu yolla açın:File.openve IO modülündeki yöntemleri kullanarak ona yazın. Aynısını anlamak için bir örnek ele alalım -
#Open the file in read, write and utf8 modes.
file = File.open!("newfile_2", [:read, :utf8, :write])
#Write to this "io_device" using standard IO functions
IO.puts(file, "Random text")
Gibi diğer IO modülü yöntemlerini kullanabilirsiniz IO.write ve IO.binwrite io_device olarak açılan dosyalara yazmak için.
Dosyadan Okuma
Dosyalardan okumanın iki yolu var. Dosya modülünden okuma işlevini kullanan ilkini görelim.
IO.puts(File.read("newfile"))
Bu kodu çalıştırırken, ilk elemanı olan bir tuple almalısınız. :ok ve ikincisi yeni dosyanın içeriği olarak
Ayrıca kullanabiliriz File.read! sadece bize döndürülen dosyaların içeriğini alma işlevi.
Açık Bir Dosyayı Kapatma
File.open işlevini kullanarak bir dosyayı açtığınızda, onu kullanmayı bitirdikten sonra, onu kullanarak kapatmalısınız. File.close işlev -
File.close(file)