Append modu
- Rust kursu
- Orta seviye
- Ders 91/115
- 4 dk
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
use std::env;
use std::fs::{self, OpenOptions};
use std::io::{self, Write};
fn main() {
// buraya yaz
}Örnek çözüm
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
let mut f = OpenOptions::new()
.____(true)
.create(true)
.open("gunluk.txt")?;
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 |