<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>第12章 I/O 项目：构建命令行程序 on 编程那些事儿</title><link>https://before80.github.io/prgms/Rust/trpl/an-io-project/</link><description>Recent content in 第12章 I/O 项目：构建命令行程序 on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2026 23:57:44 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Rust/trpl/an-io-project/index.xml" rel="self" type="application/rss+xml"/><item><title>12.1 接受命令行参数</title><link>https://before80.github.io/prgms/Rust/trpl/an-io-project/01-accepting-command-line-arguments/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/an-io-project/01-accepting-command-line-arguments/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="接受命令行参数"&gt;接受命令行参数&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch12-01-accepting-command-line-arguments.html"&gt;https://doc.rust-lang.org/stable/book/ch12-01-accepting-command-line-arguments.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="接受命令行参数-1"&gt;接受命令行参数&lt;/h2&gt;
&lt;p&gt;　　一如既往，我们用 &lt;code&gt;cargo new&lt;/code&gt; 创建新项目。项目命名为 &lt;code&gt;minigrep&lt;/code&gt;，以便与系统中可能已有的 &lt;code&gt;grep&lt;/code&gt; 工具区分开：&lt;/p&gt;</description></item><item><title>12.2 读取文件</title><link>https://before80.github.io/prgms/Rust/trpl/an-io-project/02-reading-a-file/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/an-io-project/02-reading-a-file/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="读取文件"&gt;读取文件&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch12-02-reading-a-file.html"&gt;https://doc.rust-lang.org/stable/book/ch12-02-reading-a-file.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="读取文件-1"&gt;读取文件&lt;/h2&gt;
&lt;p&gt;　　接下来为程序添加读取 &lt;code&gt;file_path&lt;/code&gt; 参数所指定文件的功能。首先需要一个用于测试的示例文件：我们用一首多行、篇幅不长、且有一些重复词的文本。示例 12-3 是艾米莉·狄金森（Emily Dickinson）的一首诗，很适合这个用途！在项目根目录创建名为 &lt;em&gt;poem.txt&lt;/em&gt; 的文件，并录入诗歌 “I’m Nobody! Who are you?”。&lt;/p&gt;</description></item><item><title>12.3 重构以改进模块化与错误处理</title><link>https://before80.github.io/prgms/Rust/trpl/an-io-project/03-improving-error-handling-and-modularity/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/an-io-project/03-improving-error-handling-and-modularity/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="重构以改进模块化与错误处理"&gt;重构以改进模块化与错误处理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch12-03-improving-error-handling-and-modularity.html"&gt;https://doc.rust-lang.org/stable/book/ch12-03-improving-error-handling-and-modularity.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="重构以改进模块化与错误处理-1"&gt;重构以改进模块化与错误处理&lt;/h2&gt;
&lt;p&gt;　　为改进程序，我们要解决四个与程序结构及潜在错误处理相关的问题。第一，&lt;code&gt;main&lt;/code&gt; 现在做两件事：解析参数和读取文件。随着程序增长，&lt;code&gt;main&lt;/code&gt; 处理的独立任务会越来越多。职责越多，就越难推理、越难测试，也越难在不破坏某部分的前提下修改。最好分离功能，让每个函数只负责一项任务。&lt;/p&gt;</description></item><item><title>12.4 用测试驱动开发增加功能</title><link>https://before80.github.io/prgms/Rust/trpl/an-io-project/04-testing-the-librarys-functionality/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/an-io-project/04-testing-the-librarys-functionality/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="用测试驱动开发增加功能"&gt;用测试驱动开发增加功能&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch12-04-testing-the-librarys-functionality.html"&gt;https://doc.rust-lang.org/stable/book/ch12-04-testing-the-librarys-functionality.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="用测试驱动开发增加功能-1"&gt;用测试驱动开发增加功能&lt;/h2&gt;
&lt;p&gt;　　既然搜索逻辑已放在 &lt;em&gt;src/lib.rs&lt;/em&gt; 中、与 &lt;code&gt;main&lt;/code&gt; 分离，为核心功能写测试就容易多了。我们可以直接用各种参数调用函数并检查返回值，而不必从命令行调用二进制。&lt;/p&gt;</description></item><item><title>12.5 使用环境变量</title><link>https://before80.github.io/prgms/Rust/trpl/an-io-project/05-working-with-environment-variables/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/an-io-project/05-working-with-environment-variables/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="使用环境变量"&gt;使用环境变量&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch12-05-working-with-environment-variables.html"&gt;https://doc.rust-lang.org/stable/book/ch12-05-working-with-environment-variables.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="使用环境变量-1"&gt;使用环境变量&lt;/h2&gt;
&lt;p&gt;　　我们再为 &lt;code&gt;minigrep&lt;/code&gt; 二进制增加一项功能：用户可通过环境变量开启大小写不敏感搜索。也可以做成命令行选项，让用户每次想用时都输入；但改成环境变量后，用户只需设置一次，该终端会话中的所有搜索就会默认大小写不敏感。&lt;/p&gt;</description></item><item><title>12.6 将错误输出重定向到标准错误</title><link>https://before80.github.io/prgms/Rust/trpl/an-io-project/06-writing-to-stderr-instead-of-stdout/</link><pubDate>Wed, 05 Aug 2026 08:44:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/trpl/an-io-project/06-writing-to-stderr-instead-of-stdout/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://doc.rust-lang.org/stable/book/"&gt;The Rust Programming Language&lt;/a&gt;（rustc 1.97.1）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="将错误输出重定向到标准错误"&gt;将错误输出重定向到标准错误&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://doc.rust-lang.org/stable/book/ch12-06-writing-to-stderr-instead-of-stdout.html"&gt;https://doc.rust-lang.org/stable/book/ch12-06-writing-to-stderr-instead-of-stdout.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="将错误重定向到标准错误"&gt;将错误重定向到标准错误&lt;/h2&gt;
&lt;p&gt;　　目前我们用 &lt;code&gt;println!&lt;/code&gt; 宏把所有输出都写到终端。在大多数终端中，输出分为两类：用于一般信息的&lt;em&gt;标准输出&lt;/em&gt;（&lt;code&gt;stdout&lt;/code&gt;），以及用于错误信息的&lt;em&gt;标准错误&lt;/em&gt;（&lt;code&gt;stderr&lt;/code&gt;）。这种区分让用户可以把程序的成功输出定向到文件，同时仍把错误信息打印到屏幕上。&lt;/p&gt;</description></item></channel></rss>