一个 I/O 项目:构建命令行程序 - 读取文件

优质
小牛编辑
139浏览
2023-12-01

接下来我们将读取由命令行文件名参数指定的文件。首先,需要一个用来测试的示例文件——用来确保 正常工作的最好的文件是拥有多行少量文本且有一些重复单词的文件。示例 12-3 是一首艾米莉·狄金森(Emily Dickinson)的诗,它正适合这个工作!在项目根目录创建一个文件 poem.txt,并输入诗 “I’m nobody! Who are you?”:

文件名: poem.txt

示例 12-3:艾米莉·狄金森的诗 “I’m nobody! Who are you?”,一个好的测试用例

文件名: src/main.rs

示例 12-4:读取第二个参数所指定的文件内容

首先,我们增加了更多的 use 语句来引入标准库中的相关部分:需要 来处理文件,而 std::prelude::* 则包含许多对于 I/O 包括文件 I/O 有帮助的 trait。类似于 Rust 有一个通用的 prelude 来自动引入特定内容,std::io 也有其自己的 prelude 来引入处理 I/O 时所需的通用内容。不同于默认的 prelude,必须显式 位于 std::io 中的 prelude。

在这些代码之后,我们再次增加了临时的 println! 打印出读取文件后 的值,这样就可以检查目前为止的程序能否工作。

尝试运行这些代码,随意指定一个字符串作为第一个命令行参数(因为还未实现搜索功能的部分)而将 poem.txt 文件将作为第二个参数:

好的!代码读取并打印出了文件的内容。虽然它还有一些瑕疵:main 函数有着多个职能,通常函数只负责一个功能的话会更简洁并易于维护。另一个问题是没有尽可能的处理错误。虽然我们的程序还很小,这些瑕疵并不是什么大问题,不过随着程序功能的丰富,将会越来越难以用简单的方法修复他们。在开发程序时,及早开始重构是一个最佳实践,因为重构少量代码时要容易的多,所以让我们现在就开始吧。