导读:跟随这个演示,学习如何在 Rust 中使用文件系统模块。
本文字数:2082,阅读时长大约: 2分钟
知道如何读写文件对各种用途都很有用。在 Rust 中,这项任务是通过标准库中的文件系统模块( doc.rust-lang.org)完成的。在这篇文章中,我将向你介绍如何使用这个模块。
为了演示这项任务,我准备了一些示例代码,也可以在 github.com 上找到。
准备工作
在使用 Rust 时,失败的函数会返回 doc.rust-lang.org 类型。尤其是文件系统模块会返回专门的类型 doc.rust-lang.org。有了这些知识,你可以从main()
函数中返回相同的类型:
fn main() -> std::io::Result<()> {
/* ...code comes here... */
Rust 文件写入
在 Rust 中执行文件的 I/O 操作是相对容易的。写入文件可以简化为一行:
use std::fs;
fs::write("favorite_websites.txt", b"opensource.com")?;
Ok(())
使用错误传播操作符(?)
,错误信息被传递到调用函数中,随后可以处理错误。由于main()
是调用栈中唯一的其他函数,如果写操作失败,错误信息将被传递到控制台输出。
doc.rust-lang.org 函数的语法是非常先进的。第一个参数是文件路径,它必须是 doc.rust-lang.org 类型。第二个参数是内容,它实际上是一个字节切片([u8]
)。Rust 将传递的参数转换为正确的类型。幸运的是,这些类型基本上是下面的例子中所处理的唯一类型。
使用文件描述符类型 doc.rust-lang.org 可以实现对写操作更简洁的访问:
let mut file = fs::File::create("favorite_websites.txt")?;
file.write_all(b"opensource.com\n")?;
Ok(())
由于文件类型实现了 doc.rust-lang.org 特性,所以可以使用相关的方法来写入文件。然而,create
方法可以覆盖一个已经存在的文件。
为了获得对文件描述符的更多控制,必须使用 doc.rust-lang.org 类型。这提供了类似于其他语言中的打开模式:
let mut file = fs::OpenOptions::new()
.append(true)
.open("favorite_websites.txt")?;
file.write_all(b"sourceforge.net\n")?;
Rust 文件读取
适用于写的东西也适用于读。读取也可以通过简单的一行代码来完成:
let websites = fs::read_to_string("favorite_websites.txt")?;
以上一行读取文件的内容并返回一个字符串。除了读取字符串,还有 doc.rust-lang.org 函数,如果文件包含二进制数据,该函数会将数据读成一个字节向量。
下一个例子显示了如何将文件的内容读入内存,随后逐行打印到控制台:
let file = fs::File::open("favorite_websites.txt")?;
let lines = io::BufReader::new(file).lines();
for line in lines {
if let Ok(_line) = line {
println!(">>> {}", _line);
}
}
总结
如果你已经熟悉了其他编程语言,你可能已经注意到没有close-
函数(或类似的)来释放文件句柄。在 Rust 中,当相关变量超出作用域,文件句柄就会被释放。为了定义关闭行为,可以在文件表示的周围应用作用域({ })
。我建议你熟悉 doc.rust-lang.org 和 doc.rust-lang.org 特性,因为你可以在许多其他类型中找到这个特性的实现。
via:
作者: 选题: 译者: 校对:
本文由 原创编译, 荣誉推出
LCTT 译者 :geekpi
翻译: 1851.5 篇
贡献: 3367 天
2013-10-25
2023-01-13
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “ 转载:公众号名称”,
我们将为您添加白名单,授权“ 转载文章时可以修改”。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.