Redian新闻
>
如何在 Rust 中读取和写入文件 | Linux 中国

如何在 Rust 中读取和写入文件 | Linux 中国

科技
 
导读:跟随这个演示,学习如何在 Rust 中使用文件系统模块。                             
本文字数:2082,阅读时长大约:2分钟

知道如何读写文件对各种用途都很有用。在 Rust 中,这项任务是通过标准库中的文件系统模块(std::fs🔗 doc.rust-lang.org)完成的。在这篇文章中,我将向你介绍如何使用这个模块。

为了演示这项任务,我准备了一些示例代码,也可以在 GitHub🔗 github.com 上找到。

准备工作

在使用 Rust 时,失败的函数会返回 Result🔗 doc.rust-lang.org 类型。尤其是文件系统模块会返回专门的类型 std::io::Result<T, Error>🔗 doc.rust-lang.org。有了这些知识,你可以从 main() 函数中返回相同的类型:

  1. fn main() -> std::io::Result<()> {
  2. /* ...code comes here... */

Rust 文件写入

在 Rust 中执行文件的 I/O 操作是相对容易的。写入文件可以简化为一行:

  1. use std::fs;
  2. fs::write("favorite_websites.txt", b"opensource.com")?;
  3. Ok(())

使用错误传播操作符 (?),错误信息被传递到调用函数中,随后可以处理错误。由于 main() 是调用栈中唯一的其他函数,如果写操作失败,错误信息将被传递到控制台输出。

fs::write🔗 doc.rust-lang.org 函数的语法是非常先进的。第一个参数是文件路径,它必须是 std::path::Path🔗 doc.rust-lang.org 类型。第二个参数是内容,它实际上是一个字节切片([u8])。Rust 将传递的参数转换为正确的类型。幸运的是,这些类型基本上是下面的例子中所处理的唯一类型。

使用文件描述符类型 std::fs::File🔗 doc.rust-lang.org 可以实现对写操作更简洁的访问:

  1. let mut file = fs::File::create("favorite_websites.txt")?;
  2. file.write_all(b"opensource.com\n")?;
  3. Ok(())

由于文件类型实现了 Write🔗 doc.rust-lang.org 特性,所以可以使用相关的方法来写入文件。然而,create 方法可以覆盖一个已经存在的文件。

为了获得对文件描述符的更多控制,必须使用 std::fs::OpenOptions🔗 doc.rust-lang.org 类型。这提供了类似于其他语言中的打开模式:

  1. let mut file = fs::OpenOptions::new()
  2. .append(true)
  3. .open("favorite_websites.txt")?;
  4. file.write_all(b"sourceforge.net\n")?;

Rust 文件读取

适用于写的东西也适用于读。读取也可以通过简单的一行代码来完成:

  1. let websites = fs::read_to_string("favorite_websites.txt")?;

以上一行读取文件的内容并返回一个字符串。除了读取字符串,还有 std::fs::read🔗 doc.rust-lang.org 函数,如果文件包含二进制数据,该函数会将数据读成一个字节向量。

下一个例子显示了如何将文件的内容读入内存,随后逐行打印到控制台:

  1. let file = fs::File::open("favorite_websites.txt")?;
  2. let lines = io::BufReader::new(file).lines();
  3. for line in lines {
  4. if let Ok(_line) = line {
  5. println!(">>> {}", _line);
  6. }
  7. }

总结

如果你已经熟悉了其他编程语言,你可能已经注意到没有 close- 函数(或类似的)来释放文件句柄。在 Rust 中,当相关变量超出作用域,文件句柄就会被释放。为了定义关闭行为,可以在文件表示的周围应用作用域 ({ })。我建议你熟悉 Read🔗 doc.rust-lang.org 和 Write🔗 doc.rust-lang.org 特性,因为你可以在许多其他类型中找到这个特性的实现。


via: https://opensource.com/article/23/1/read-write-files-rust

作者:Stephan Avenwedde 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :geekpi
💎💎💎💎
翻译: 1851.5 篇
|
贡献: 3367 天
2013-10-25
2023-01-13
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
使用 PCManFM 文件管理器让你的 Linux PC 轻装上阵 | Linux 中国在 Linux 上试试这个基于 Python 的文件管理器 | Linux 中国为什么你要在 Linux 上尝试 Nemo 文件管理器? | Linux 中国如何在 Linux 中降级 Flatpak 软件包 | Linux 中国lnav: 用于 Linux 的高级日志文件浏览器 | Linux 中国Rust 语言年度回顾:全球企业如何采用 Rust的?如何在 Silverblue 上变基到 Fedora Linux 37 | Linux 中国如何在 Arch Linux 中安装 OpenOffice(新手指南) | Linux 中国拜登芯片出口管制引发高科技产业裁员潮如何在 Linux 系统中访问 UEFI 设置 | Linux 中国如何在 Ubuntu 和其他 Linux 下安装 IDLE Python IDE | Linux 中国如何在 Arch Linux 中安装 MATE 桌面 | Linux 中国美国自驾游——南卡州,South Carolina小主播查税潮来了;预制菜首次写入中央一号文件;去年新消费融资金额同比腰斩;海信集团换帅;印力上海发力浦东连下4城|联商头条如何在 Arch Linux 中安装 GNOME 桌面 | Linux 中国如何在 Arch Linux 中安装 Cinnamon 桌面 | Linux 中国渔歌子(2):滨海沙雕凝匠心硬核观察 #848 Linux 6.1 发布,拉开 Rust 进入 Linux 内核的大幕如何在 Linux 中找到一个进程 ID 并杀死它 | Linux 中国天赋“易昺(bǐng)”,创造历史!输入文字生成音乐,这个音乐版Stable Diffusion火了,网友:电子音乐界要被冲击了 | 在线可玩试试这个 Linux 网络浏览器作为你的文件管理器 | Linux 中国在 Linux 上试试这个 Java 文件管理器 | Linux 中国OBS Studio 29 发布,但对 Linux 用户来说变化不大 | Linux 中国以调试 Rust 的方式来学习 Rust | Linux 中国Linux 6.1正式发布,带有MGLRU、初始Rust支持如何在 Linux 中使用 SCP 安全地传输文件 | Linux 中国Linux 内核 6.1 发布,包含初始 Rust 支持 | Linux 中国如何在 Linux 中更新 Flatpak 软件包 | Linux 中国从 Rust 调用 C 库函数 | Linux 中国GNOME 2 的 Linux 文件管理器 Caja | Linux 中国Garuda Linux “Raptor” 230305 版本发布 | Linux 中国想起哥如何在 Arch Linux 中安装 elementary OS 的 Pantheon 桌面 | Linux 中国精忠报国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。