Rust: алғашқы қадамнан жеке жоспарлау құралына дейін 49-сабақ (барлығы 55)
Жолдар және файл жүйесі
49-сабақ. Әртүрлі жүйеде дерек файлының орнын түсінікті етіп таңдау.
Мәтін ИИ көмегімен аударылды.
Алдын ала: жұмыс бумасы, терминал және қателер. Әзірше тек жол құрамыз, файл жасамаймыз.
Таныс бейне және тірек сызба
Хаттағы мекенжай үйді қайдан іздеуді айтады; үйдің барын немесе есігінің ашық екенін кепілдемейді. Жол — файл жүйесіндегі файлдың не буманың мекенжайы. Ағымдағы жұмыс бумасы — салыстырмалы жол есептелетін орын. Ұқсатудың шегі: бағдарламаны басқа бумадан қоссаңыз, бірдей салыстырмалы жол басқа жерге апарады.
Path — қарызға алынған мекен көрінісі → join — атау жалғау → PathBuf — өзіне тиесілі мекен → әрекет алдында тексеру. Path::new("data") жолға қарызға алынған көрініс жасайды; PathBuf құрастырылған жолға иелік етеді. join("tasks.txt") жүйе ережесімен жаңа құрамдас бөлікті жалғайды. std::path::{Path, PathBuf} — бір модульден екі атауды алу жазылымы; бұйра жақшалар атауларды топтайды. is_absolute() мекеннің түбірден басталатынын көрсетеді; data/tasks.txt салыстырмалы. file_name() нәтижесі Option, себебі түбірде немесе кейбір жолда соңғы атау болмайды. Бұл оқу мысалында атау барын білеміз, сондықтан unwrap() қолданамыз; қолданушы берген жолда None жағдайын өңдеңіз. to_string_lossy() жүйелік атауды мәтінге айналдырғанда UTF-8-ге дәл келмейтін таңбаны алмастыруы мүмкін; файл әрекеттерінде Path не PathBuf қалсын.
Дискіге тимей мекен құраңыз
use std::path::{Path, PathBuf};
fn main() {
let folder = Path::new("data");
let file: PathBuf = folder.join("tasks.txt");
println!("{}", file.is_absolute());
println!("{}", file.file_name().unwrap().to_string_lossy());
}
false
tasks.txt
false салыстырмалы жолды білдіреді, ал соңғы жол файл атауын береді. Толық жолды шығармаймыз: бумаларды бөлетін таңба Windows пен Unix жүйесінде өзгеше. Жолда бос орын мен қазақ әріптері болуы мүмкін; join бөлгішті өзіңіз жазуды қажет етпейді.
Қол жеткізу құқығы файлмен әрекет кезінде тексеріледі: жол бар болса да, PermissionDenied қатесі шығуы мүмкін. Дұрыс мекенжай жабық есікті ашпайды.
Бетке қарамай жауап беріңіз
data/tasks.txtқай бумадан есептеледі?PathBufпенPathайырмасы қандай?- Дұрыс құрастырылған жол файлдың барын дәлелдей ме?
Тапсырма
Міндетті. folder.join("backup.txt") деген екінші жол жасап, тек backup.txt атауын шығарыңыз. Одан соң жобаны басқа жұмыс бумасынан cargo run --manifest-path ЖОБА_ЖОЛЫ/Cargo.toml арқылы іске қосыңыз: --manifest-path Cargo-ға жоба файлын көрсетеді; cargo run бағдарламаны терминалдың ағымдағы бумасынан іске қосады. Салыстырмалы жол енді қай жерден есептелетінін түсіндіріңіз. Ешбір файл жасамаңыз, жеке деректердің нақты жолын қолданбаңыз.
Жауаптар
Жауаптарды көрсету
file_name() шақырылған жолды backup үшін қайталаңыз. Мұндағы unwrap() тек алдын ала белгілі оқу атауына қатысты.
use std::path::{Path, PathBuf};
fn main() {
let folder = Path::new("data");
let file: PathBuf = folder.join("tasks.txt");
println!("{}", file.is_absolute());
println!("{}", file.file_name().unwrap().to_string_lossy());
let backup = folder.join("backup.txt");
println!("{}", backup.file_name().unwrap().to_string_lossy());
}
false
tasks.txt
backup.txt
Тексергеннен кейін
Нақты файлмен жұмыс істегенде сақталатын орынды анық таңдап, қолданушыға көрсетіңіз. Келесі сабақ жоқ файл мен қолжетімсіз файлды енгізу-шығару нәтижесі ретінде қарайды. Ағымдағы бума түсініксіз болса, 4-сабақты қайталаңыз. PathBuf туралы ресми құжаттама.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.