สนิม - อินพุต / เอาต์พุตไฟล์

นอกเหนือจากการอ่านและเขียนไปยังคอนโซลแล้ว Rust ยังช่วยให้อ่านและเขียนไฟล์ได้

โครงสร้างไฟล์แสดงถึงไฟล์ อนุญาตให้โปรแกรมดำเนินการอ่าน - เขียนบนไฟล์ วิธีการทั้งหมดในโครงสร้างไฟล์ส่งคืนตัวแปรของการแจงนับ io :: Result

วิธีการที่ใช้กันทั่วไปของโครงสร้างไฟล์แสดงอยู่ในตารางด้านล่าง -

ซีเนียร์ No โมดูล วิธี ลายเซ็น คำอธิบาย
1 std :: fs :: ไฟล์ เปิด() pub fn open <P: AsRef> (path: P) -> ผลลัพธ์ สามารถใช้วิธีการเปิดแบบคงที่เพื่อเปิดไฟล์ในโหมดอ่านอย่างเดียว
2 std :: fs :: ไฟล์ สร้าง() pub fn สร้าง <P: AsRef> (path: P) -> ผลลัพธ์ Static method เปิดไฟล์ในโหมดเขียนอย่างเดียว หากไฟล์มีอยู่แล้วเนื้อหาเก่าจะถูกทำลาย มิฉะนั้นไฟล์ใหม่จะถูกสร้างขึ้น
3 std :: fs :: remove_file ลบไฟล์ () pub fn remove_file <P: AsRef> (path: P) -> ผลลัพธ์ <()> ลบไฟล์ออกจากระบบไฟล์ ไม่มีการรับประกันว่าไฟล์จะถูกลบทันที
4 std :: fs :: OpenOptions ผนวก() pub fn ต่อท้าย (& mut self, append: bool) -> & mut OpenOptions ตั้งค่าตัวเลือกสำหรับโหมดต่อท้ายของไฟล์
5 std :: io :: เขียน write_all () fn write_all (& mut self, buf: & [u8]) -> ผลลัพธ์ <()> พยายามเขียนบัฟเฟอร์ทั้งหมดลงในงานเขียนนี้
6 std :: io :: อ่าน read_to_string () fn read_to_string (& mut self, buf: & mut String) -> ผลลัพธ์ อ่านไบต์ทั้งหมดจนถึง EOF ในแหล่งข้อมูลนี้ต่อท้ายด้วย buf

เขียนลงในไฟล์

ให้เราดูตัวอย่างเพื่อทำความเข้าใจวิธีการเขียนไฟล์

โปรแกรมต่อไปนี้สร้างไฟล์ 'data.txt' เมธอด create () ใช้เพื่อสร้างไฟล์ เมธอดจะส่งคืนไฟล์แฮนเดิลหากสร้างไฟล์สำเร็จ ฟังก์ชันwrite_allบรรทัดสุดท้ายจะเขียนไบต์ในไฟล์ที่สร้างขึ้นใหม่ หากการดำเนินการใด ๆ ล้มเหลวฟังก์ชัน expect () จะส่งกลับข้อความแสดงข้อผิดพลาด

use std::io::Write;
fn main() {
   let mut file = std::fs::File::create("data.txt").expect("create failed");
   file.write_all("Hello World".as_bytes()).expect("write failed");
   file.write_all("\nTutorialsPoint".as_bytes()).expect("write failed");
   println!("data written to file" );
}

เอาต์พุต

data written to file

อ่านจากไฟล์

โปรแกรมต่อไปนี้อ่านเนื้อหาในไฟล์ data.txt และพิมพ์ไปยังคอนโซล ฟังก์ชัน "เปิด" ใช้เพื่อเปิดไฟล์ที่มีอยู่ พา ธ สัมบูรณ์หรือสัมพัทธ์ไปยังไฟล์ถูกส่งผ่านไปยังฟังก์ชัน open () เป็นพารามิเตอร์ ฟังก์ชัน open () จะแสดงข้อยกเว้นหากไม่มีไฟล์อยู่หรือไม่สามารถเข้าถึงได้ด้วยเหตุผลใดก็ตาม หากทำได้สำเร็จตัวจัดการไฟล์สำหรับไฟล์ดังกล่าวจะถูกกำหนดให้กับตัวแปร "file"

ฟังก์ชัน "read_to_string" ของแฮนเดิล "file" ใช้เพื่ออ่านเนื้อหาของไฟล์นั้นในตัวแปรสตริง

use std::io::Read;

fn main(){
   let mut file = std::fs::File::open("data.txt").unwrap();
   let mut contents = String::new();
   file.read_to_string(&mut contents).unwrap();
   print!("{}", contents);
}

เอาต์พุต

Hello World
TutorialsPoint

ลบไฟล์

ตัวอย่างต่อไปนี้ใช้ฟังก์ชัน remove_file () เพื่อลบไฟล์ ฟังก์ชัน expect () ส่งคืนข้อความที่กำหนดเองในกรณีที่เกิดข้อผิดพลาด

use std::fs;
fn main() {
   fs::remove_file("data.txt").expect("could not remove file");
   println!("file is removed");
}

เอาต์พุต

file is removed

ผนวกข้อมูลลงในไฟล์

ฟังก์ชัน append () เขียนข้อมูลที่ส่วนท้ายของไฟล์ สิ่งนี้แสดงในตัวอย่างด้านล่าง -

use std::fs::OpenOptions;
use std::io::Write;

fn main() {
   let mut file = OpenOptions::new().append(true).open("data.txt").expect(
      "cannot open file");
   file.write_all("Hello World".as_bytes()).expect("write failed");
   file.write_all("\nTutorialsPoint".as_bytes()).expect("write failed");
   println!("file append success");
}

เอาต์พุต

file append success

คัดลอกไฟล์

ตัวอย่างต่อไปนี้คัดลอกเนื้อหาในไฟล์ไปยังไฟล์ใหม่

use std::io::Read;
use std::io::Write;

fn main() {
   let mut command_line: std::env::Args = std::env::args();
   command_line.next().unwrap();
   // skip the executable file name
   // accept the source file
   let source = command_line.next().unwrap();
   // accept the destination file
   let destination = command_line.next().unwrap();
   let mut file_in = std::fs::File::open(source).unwrap();
   let mut file_out = std::fs::File::create(destination).unwrap();
   let mut buffer = [0u8; 4096];
   loop {
      let nbytes = file_in.read(&mut buffer).unwrap();
      file_out.write(&buffer[..nbytes]).unwrap();
      if nbytes < buffer.len() { break; }
   }
}

รันโปรแกรมดังกล่าวข้างต้นเป็นmain.exe data.txt datacopy.txt มีการส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งสองรายการขณะเรียกใช้ไฟล์ -

  • เส้นทางไปยังไฟล์ต้นฉบับ
  • ไฟล์ปลายทาง