Rust में फ़ाइल सिस्टम के साथ काम करना: पूर्ण गाइड
Rust एक आधुनिक सिस्टम प्रोग्रामिंग भाषा है जो फ़ाइल सिस्टम के साथ काम करने के लिए शक्तिशाली और सुरक्षित उपकरण प्रदान करती है। सख्त टाइप सिस्टम और स्वामित्व मॉडल के कारण, Rust फ़ाइल प्रबंधन से संबंधित कई त्रुटियों, जैसे डेटा रेस या संसाधन लीक, से बचने में मदद करता है। इस लेख में, हम विस्तार से समझेंगे कि Rust में फ़ाइल सिस्टम के साथ बुनियादी संचालन कैसे करें: फ़ाइलों और निर्देशिकाओं का निर्माण, पढ़ना, लिखना, कॉपी करना और हटाना। सभी कोड उदाहरण मानक लाइब्रेरी std::fs का उपयोग करके लिखे गए हैं।
प्रोजेक्ट तैयार करना और मॉड्यूल आयात करना
आरंभ करने के लिए, Cargo का उपयोग करके एक नया प्रोजेक्ट बनाएँ:
cargo new file_system_democd file_system_demoफ़ाइल src/main.rs खोलें और निम्नलिखित आयात जोड़ें:
use std::fs;use std::io::{self, Write, Read};use std::path::Path;मॉड्यूल std::fs फ़ाइलों और निर्देशिकाओं के साथ काम करने के लिए फ़ंक्शन प्रदान करता है। std::io में इनपुट/आउटपुट के लिए ट्रेट्स हैं, और std::path::Path पथों के साथ काम करने के लिए है।
फ़ाइलें बनाना और लिखना
फ़ाइल बनाने और उसमें डेटा लिखने का सबसे सरल तरीका fs::write फ़ंक्शन का उपयोग करना है। यह फ़ाइल का पथ और बाइट्स या स्ट्रिंग के रूप में सामग्री लेता है।
fn main() -> io::Result<()> { // फ़ाइल बनाएँ और उसमें एक स्ट्रिंग लिखें fs::write("hello.txt", "नमस्ते, Rust!")?; println!("फ़ाइल सफलतापूर्वक बनाई गई।"); Ok(())}यदि आपको अधिक नियंत्रण की आवश्यकता है, तो fs::File और write या write_all विधियों का उपयोग करें:
fn main() -> io::Result<()> { let mut file = fs::File::create("data.txt")?; file.write_all(b"डेटा की पंक्ति")?; file.write_all("एक और पंक्ति".as_bytes())?; Ok(())}? पर ध्यान दें — यह त्रुटि प्रसार ऑपरेटर है। यदि ऑपरेशन विफल होता है, तो त्रुटि फ़ंक्शन से वापस कर दी जाएगी।
फ़ाइलें पढ़ना
फ़ाइल की पूरी सामग्री को स्ट्रिंग में पढ़ने के लिए fs::read_to_string का उपयोग करें:
fn main() -> io::Result<()> { let contents = fs::read_to_string("hello.txt")?; println!("फ़ाइल की सामग्री:{}", contents); Ok(())}यदि फ़ाइल में बाइनरी डेटा है, तो fs::read का उपयोग करें, जो Vec<u8> लौटाता है:
fn main() -> io::Result<()> { let data = fs::read("image.png")?; println!("{} बाइट पढ़े गए", data.len()); Ok(())}पंक्ति दर पंक्ति पढ़ने के लिए BufReader का उपयोग करना सुविधाजनक है:
fn main() -> io::Result<()> { let file = fs::File::open("data.txt")?; let reader = io::BufReader::new(file); for line in reader.lines() { let line = line?; println!("{}", line); } Ok(())}निर्देशिकाओं के साथ काम करना
नई निर्देशिका बनाना fs::create_dir या fs::create_dir_all (नेस्टेड पथों के लिए) के साथ किया जाता है:
fn main() -> io::Result<()> { // एक निर्देशिका बनाएँ fs::create_dir("my_folder")?;
// नेस्टेड निर्देशिकाएँ बनाएँ (mkdir -p के समान) fs::create_dir_all("a/b/c")?; println!("निर्देशिकाएँ बनाई गईं।"); Ok(())}फ़ाइल या निर्देशिका के अस्तित्व की जाँच करने के लिए Path::exists का उपयोग करें:
fn main() { let path = Path::new("hello.txt"); if path.exists() { println!("फ़ाइल मौजूद है।"); } else { println!("फ़ाइल नहीं मिली।"); }}निर्देशिका की सामग्री की सूची प्राप्त करने के लिए fs::read_dir का उपयोग करें:
fn main() -> io::Result<()> { let e