- Rust 教程
- Rust - 首页
- Rust - 简介
- Rust - 环境搭建
- Rust - HelloWorld 示例
- Rust - 数据类型
- Rust - 变量
- Rust - 常量
- Rust - 字符串
- Rust - 运算符
- Rust - 决策机制
- Rust - 循环
- Rust - 函数
- Rust - 元组
- Rust - 数组
- Rust - 所有权
- Rust - 借用
- Rust - 切片
- Rust - 结构体
- Rust - 枚举
- Rust - 模块
- Rust - 集合
- Rust - 错误处理
- Rust - 泛型类型
- Rust - 输入输出
- Rust - 文件输入/输出
- Rust - 包管理器
- Rust - 迭代器和闭包
- Rust - 智能指针
- Rust - 并发
- Rust 有用资源
- Rust - 快速指南
- Rust - 有用资源
- Rust - 讨论
Rust - 文件输入/输出
除了读取和写入控制台,Rust 还允许读取和写入文件。
File 结构体表示一个文件。它允许程序对文件执行读写操作。File 结构体中的所有方法都返回 io::Result 枚举的变体。
File 结构体常用的方法列在下表中:
序号 | 模块 | 方法 | 签名 | 描述 |
---|---|---|---|---|
1 | std::fs::File | open() | pub fn open<P: AsRef>(path: P) -> Result | open 静态方法可用于以只读模式打开文件。 |
2 | std::fs::File | create() | pub fn create<P: AsRef>(path: P) -> Result | 静态方法以只写模式打开文件。如果文件已存在,则旧内容将被销毁。否则,将创建一个新文件。 |
3 | std::fs::remove_file | remove_file() | pub fn remove_file<P: AsRef>(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`。执行文件时传递两个命令行参数:
- 源文件的路径
- 目标文件
广告