CodeBlanks Logo Icon CodeBlanks

Dosya yazma

std::fs::write ile dosya yazmayı öğrenirsin.

Dosya yazma

fs::write dosyayı oluşturur ya da üzerine yazar. Parça parça yazmak için File::create ve Write trait'i kullanılır; writeln! makrosu dosyalara da yazabilir:

use std::fs::File;
use std::io::Write;

let mut f = File::create("sayilar.txt")?;
for i in 1..=3 {
    writeln!(f, "{i}")?;
}

write!/writeln! kullanmak için std::io::Write kapsamda olmalıdır. Dosya, f kapsamdan çıkınca otomatik kapanır.

Tamponlu yazma

Çok sayıda küçük yazma işletim sistemine çok sayıda çağrı demektir. BufWriter, yazılanları bellekte toplayıp toplu gönderir:

use std::io::{BufWriter, Write};

let f = File::create("buyuk.txt")?;
let mut w = BufWriter::new(f);
for i in 0..10_000 {
    writeln!(w, "{i}")?;
}
w.flush()?;   // kalan tamponu gönder ve hatayı yakala

BufWriter bırakılırken de tamponu boşaltır, ama o anda oluşan hata görmezden gelinir; bu yüzden açık flush önerilir.

Uygulama Sayıları yaz

Geçici klasörde sayilar.txt dosyasını File::create ile aç ve writeln! ile 1'den 3'e kadar sayıları yaz. Dosyayı tekrar okuyup satırları virgülle birleştirerek yazdır.

Başlangıç kodu

main.rs
use std::env;
use std::fs::{self, File};
use std::io::{self, Write};

fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
use std::env;
use std::fs::{self, File};
use std::io::{self, Write};

fn main() -> io::Result<()> {
    let yol = env::temp_dir().join("sayilar.txt");
    {
        let mut f = File::create(&yol)?;
        for i in 1..=3 {
            writeln!(f, "{}", i)?;
        }
    }
    let icerik = fs::read_to_string(&yol)?;
    let parcalar: Vec<&str> = icerik.lines().collect();
    println!("{}", parcalar.join(","));
    Ok(())
}

Beklenen çıktı

1,2,3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>File::create</code> var olan bir dosyayla ne yapar?

  • Hata verir
  • Yedek alır
  • İçeriğini siler (sıfır uzunluğa indirir) Doğru cevap
  • Sonuna ekler

Açıklama: Var olan dosyayı korumak için File::create_new (yalnızca yeni dosya) ya da OpenOptions ile append kullanılır.

2 Satır yaz

Soru
let mut f = File::create("sayilar.txt")?;
____(f, "{}", 42)?;
Cevap
let mut f = File::create("sayilar.txt")?;
writeln!(f, "{}", 42)?;

Açıklama: writeln! Write uygulayan herhangi bir hedefe satır yazar.

3 İşlem ve etkisi

Kavram Anlamı
fs::write Oluşturur ya da ezer
File::create Boş dosya açar
BufWriter::new(f) Toplu yazma
w.flush() Tamponu boşaltır

Orta seviye bölümündeki tüm dersler