Dosya yazma
- Rust kursu
- Orta seviye
- Ders 90/115
- 4 dk
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ı yakalaBufWriter 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
use std::env;
use std::fs::{self, File};
use std::io::{self, Write};
fn main() {
// buraya yaz
}Örnek çözüm
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
let mut f = File::create("sayilar.txt")?;
____(f, "{}", 42)?;
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 |