สนิม - อินพุต / เอาต์พุตไฟล์
นอกเหนือจากการอ่านและเขียนไปยังคอนโซลแล้ว 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 มีการส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งสองรายการขณะเรียกใช้ไฟล์ -
- เส้นทางไปยังไฟล์ต้นฉบับ
- ไฟล์ปลายทาง