Rust 文件输入/输出

Rust 文件输入/输出

除了在控制台上读写外,Rust还允许读写文件。

File结构表示一个文件。它允许程序在文件上执行读写操作。File结构中的所有方法都返回io::Result枚举的变体。

File结构的常用方法列在下表中−

序号 模块 方法 签名 描述
1 std::fs::File open() pub fn open(path: P) -> Result open静态方法可用于以只读模式打开文件。
2 std::fs::File create() pub fn create(path: P) -> Result 静态方法以只写模式打开文件。如果文件已经存在,则删除原有内容。否则,创建新文件。
3 std::fs::remove_file remove_file() pub fn remove_file(path: P) -> Result<()> 从文件系统中删除文件。不能保证立即删除文件。
4 std::fs::OpenOptions append() pub fn append(&mut self, append: bool) -> &mut OpenOptions 设置文件的追加模式选项。
5 std::io::Writes write_all() fn write_all(&mut self, buf: &[u8]) -> Result<()> 尝试将整个缓冲区写入此写入器。
6 std::io::Read read_to_string() fn read_to_string(&mut self, buf: &mut String) -> Result 从源中读取直到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()函数。如果文件不存在或由于某种原因不可访问,open()函数会抛出异常。如果成功,文件句柄将被赋值给”file”变量。

使用”file”句柄的”read_to_string”函数将该文件的内容读取到一个字符串变量中。

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。在执行文件时,传递了两个命令行参数:

  • 源文件路径
  • 目标文件

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程