Rust
Dizin işlemleri
read_dir ile dizin içeriğini listelemeyi öğrenirsin.
Dizin işlemleri
Klasör oluşturmak, listelemek ve silmek için std::fs fonksiyonları kullanılır. read_dir, her biri io::Result<DirEntry> olan bir yineleyici döndürür:
fs::create_dir_all("veri/2024")?; // ara klasörleri de oluşturur
for giris in fs::read_dir("veri")? {
let giris = giris?;
println!("{:?} {}", giris.file_name(), giris.path().is_dir());
}
read_dir girdileri belirli bir sırayla vermez; sıra gerekiyorsa adlar toplanıp sıralanmalıdır.
Uzantıya göre süzmek
Path yöntemleri, yolları metin işlemine gerek kalmadan parçalar:
let yol = std::path::Path::new("veri/rapor.txt");
println!("{:?}", yol.file_name()); // Some("rapor.txt")
println!("{:?}", yol.extension()); // Some("txt")
println!("{:?}", yol.parent()); // Some("veri")
println!("{}", yol.exists());
extension() bir Option<&OsStr> döndürür; karşılaştırmak için == Some(OsStr::new("txt")) ya da .and_then(|e| e.to_str()) kullanılır.
Uygulama Klasör içeriği
Geçici klasörde rust_ders_klasor adlı bir klasör oluştur (create_dir_all) ve içine b.txt ile a.txt yaz. read_dir ile dosya adlarını Vec<String>'e topla, sırala ve yazdır.
Örnek çözümü göster
use std::env;
use std::fs;
use std::io;
fn main() -> io::Result<()> {
let klasor = env::temp_dir().join("rust_ders_klasor");
fs::create_dir_all(&klasor)?;
fs::write(klasor.join("b.txt"), "2")?;
fs::write(klasor.join("a.txt"), "1")?;
let mut adlar = Vec::new();
for giris in fs::read_dir(&klasor)? {
let giris = giris?;
adlar.push(giris.file_name().to_string_lossy().into_owned());
}
adlar.sort();
println!("{:?}", adlar);
Ok(())
}
Kendini test et
-
<code>fs::remove_dir</code> ile <code>fs::remove_dir_all</code> farkı nedir?
- Fark yok
- remove_dir_all çöp kutusuna taşır
- remove_dir dosya siler
- remove_dir yalnızca boş klasörü siler; remove_dir_all içeriğiyle birlikte siler
Cevabı göster
remove_dir yalnızca boş klasörü siler; remove_dir_all içeriğiyle birlikte siler — remove_dir_all geri alınamaz; kullanmadan önce yolu iki kez denetle.
-
Klasörü listele
for giris in fs::____("veri")? {
let giris = giris?;
}
Cevabı göster
for giris in fs::read_dir("veri")? {
let giris = giris?;
}
-
Fonksiyon ve işi
- create_dir_all
- Ara klasörlerle oluşturur
- read_dir
- Girdileri listeler
- remove_dir_all
- İçerikle siler
- Path::extension
- Dosya uzantısı
Sıradaki ders: Özet - Dosya I/O