安丘做网站,雨云服务器,办公oa系统是什么,wordpress爆破开发环境
Windows 10Rust 1.74.1 VS Code 1.85.1 项目工程
这次创建了新的工程minigrep. 读取文件
现在#xff0c;我们将添加读取file_path参数中指定的文件的功能。首先#xff0c;我们需要一个样本文件来测试它:我们将使用一个包含少量文本的文件#xff0c;多行包含一…开发环境
Windows 10Rust 1.74.1 VS Code 1.85.1 项目工程
这次创建了新的工程minigrep. 读取文件
现在我们将添加读取file_path参数中指定的文件的功能。首先我们需要一个样本文件来测试它:我们将使用一个包含少量文本的文件多行包含一些重复的单词。示例12-3中有一首艾米莉·狄金森的诗效果很好在项目的根级别创建一个名为poem.txt的文件输入诗歌“我是无名小卒你是谁”
文件名:poem.txt
Im nobody! Who are you?
Are you nobody, too?
Then theres a pair of us - dont tell!
Theyd banish us, you know.How dreary to be somebody!
How public, like a frog
To tell your name the livelong day
To an admiring bog!示例12-3:艾米莉·狄金森的一首诗是一个很好的测试案例 文本就绪后编辑src/main.rs并添加代码来读取该文件如示例12-4所示。
文件名:src/main.rs
use std::env;
use std::fs;fn main() {let args: VecString env::args().collect();let file_path args[2];// --snip--println!(In file {}, file_path);let contents fs::read_to_string(file_path).expect(Should have been able to read the file);println!(With text:\n{contents});
}
示例12-4:读取第二个参数指定的文件内容
首先我们引入标准库的相关部分和一个use声明:我们需要std::fs来处理文件。
在main中新语句fs::read_to_string接受file_path打开该文件并返回文件内容的std::io::ResultString 。
之后我们再次添加一个临时的println!语句该语句在文件被读取后打印contents的值因此我们可以检查程序到目前为止是否工作正常。
让我们运行这段代码将任意字符串作为第一个命令行参数(因为我们还没有实现搜索部分)将poem.txt文件作为第二个参数:
$ cargo run -- the poem.txtCompiling minigrep v0.1.0 (file:///projects/minigrep)Finished dev [unoptimized debuginfo] target(s) in 0.0sRunning target/debug/minigrep the poem.txt
Searching for the
In file poem.txt
With text:
Im nobody! Who are you?
Are you nobody, too?
Then theres a pair of us - dont tell!
Theyd banish us, you know.How dreary to be somebody!
How public, like a frog
To tell your name the livelong day
To an admiring bog! 太好了代码读取然后打印文件的内容。但是代码有一些缺陷。目前main有多重职责:一般来说如果每个功能只负责一个想法功能会更清晰更容易维护。另一个问题是我们没有尽可能好地处理错误。程序仍然很小所以这些缺陷不是大问题但是随着程序的增长干净地修复它们会变得更加困难。在开发程序的早期开始重构是一个很好的实践因为重构少量的代码要容易得多。我们接下来会这么做。
本章重点
如何获取命令行参数如何读取文件