Shanraq.org Shanraq.org
Жолдар және файл жүйесі
IT

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 қатесі шығуы мүмкін. Дұрыс мекенжай жабық есікті ашпайды.

Бетке қарамай жауап беріңіз

  1. data/tasks.txt қай бумадан есептеледі?
  2. PathBuf пен Path айырмасы қандай?
  3. Дұрыс құрастырылған жол файлдың барын дәлелдей ме?

Тапсырма

Міндетті. 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)

Әзірге пікір жоқ. Бірінші болыңыз.