文件输入/输出

收藏357

阅读11171

更新时间2025-08-27

除了读取和写入控制台之外,Rust 还允许读取和写入文件。

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

File 结构体常用的方法如下表所示 −

Sr.No 模块 方法 函数 描述
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();
   // 跳过可执行文件名
   // 接受源文件
   let source = command_line.next().unwrap();
   // 接受目标文件
   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。 执行文件时传递两个命令行参数 −

  • 源文件的路径
  • 目标文件

相关

视频

RELATED VIDEOS

更多

免费

phpStudy极速入门视频教程

免费

Midjourney基础课程
初级 Midjourney基础课程

11149次学习

收藏

免费

极客学院Git使用视频教程

免费

尚观shell视频教程
高级 尚观shell视频教程

15709次学习

收藏

免费

尚观Linux入门视频教程
初级 尚观Linux入门视频教程

42887次学习

收藏

免费

尚观Linux初级视频教程
初级 尚观Linux初级视频教程

40264次学习

收藏

免费

尚观Linux中级视频教程
中级 尚观Linux中级视频教程

48298次学习

收藏

免费

尚观Linux高级视频教程
高级 尚观Linux高级视频教程

41982次学习

收藏

科技资讯

更多

精选课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

61.7万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

39.3万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

70.9万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

61.6万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

23万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

33.9万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

125万人学习

关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号