CodeBlanks Logo Icon CodeBlanks

Append modu

OpenOptions ile ekleme (append) modunu öğrenirsin.

Append modu

Var olan dosyanın sonuna eklemek için OpenOptions kullanılır. Hangi işlemlere izin verildiği tek tek belirtilir:

use std::fs::OpenOptions;
use std::io::Write;

let mut f = OpenOptions::new()
    .append(true)    // sona ekle
    .create(true)    // yoksa oluştur
    .open("gunluk.txt")?;
writeln!(f, "yeni kayıt")?;

Günlük (log) dosyaları için idealdir: her çalıştırma öncekileri silmeden yeni satırlar ekler.

Seçenekler

OpenOptions diğer açma yöntemlerinin temelidir:

File::open(y)    // = OpenOptions::new().read(true).open(y)
File::create(y)  // = .write(true).create(true).truncate(true)

OpenOptions::new().write(true).create_new(true).open(y)
// yalnızca dosya YOKSA açar; varsa AlreadyExists hatası

create_new, iki programın aynı dosyayı aynı anda oluşturmaya çalıştığı yarış durumlarına karşı güvenlidir.

Uygulama Günlük dosyası

Geçici klasörde gunluk.txt dosyasına fs::write ile "a\n" yaz. Ardından iki kez OpenOptions ile append modunda açıp "b" satırı ekle. Dosyayı okuyup satırları | ile birleştirerek yazdır.

Başlangıç kodu

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

fn main() {
    // buraya yaz
}

Örnek çözüm

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

fn main() -> io::Result<()> {
    let yol = env::temp_dir().join("gunluk.txt");
    fs::write(&yol, "a\n")?;
    for _ in 0..2 {
        let mut f = OpenOptions::new().append(true).create(true).open(&yol)?;
        writeln!(f, "b")?;
    }
    let icerik = fs::read_to_string(&yol)?;
    let s: Vec<&str> = icerik.lines().collect();
    println!("{}", s.join("|"));
    Ok(())
}

Beklenen çıktı

a|b|b

Soru ve cevaplar

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

1 <code>OpenOptions::new().append(true).open(..)</code> dosya yoksa ne yapar?

  • Hiçbir şey yapmaz
  • NotFound hatası döndürür; create(true) gerekir Doğru cevap
  • Dosyayı oluşturur
  • Panic verir

Açıklama: OpenOptions'ta her davranış açıkça istenmelidir; varsayılan hiçbir şeydir.

2 Sona ekle

Soru
let mut f = OpenOptions::new()
    .____(true)
    .create(true)
    .open("gunluk.txt")?;
Cevap
let mut f = OpenOptions::new()
    .append(true)
    .create(true)
    .open("gunluk.txt")?;

Açıklama: append(true) yazmaları dosyanın sonuna yapar.

3 Yöntem ve eşdeğeri

Kavram Anlamı
File::open read(true)
File::create write + create + truncate
append(true) Sona ekler
create_new(true) Varsa hata

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