如何将字符串写入文件?

14

我正在尝试弄清楚如何将字符串写入文件。以下代码给出了错误:格式参数必须是字符串字面值

use std::fs::File;
use std::io::{Error, Write};

fn main() -> Result<(), Error> {
    let path = "results.txt";
    let mut output = File::create(path)?;
    let line = println!("{}", "hello");
    write!(output, line);
}

如何从字符串变量中将内容写入文件?如果我更改以下行,它可以工作,但是如果字符串在变量中,我就无法想出如何将其写入文件。

我该怎么做呢?

write!(output, "foo,bar,baz");

3
println! 的返回类型是单元类型(unit); 它会将格式化的字符串打印到标准输出(stdout)---也许考虑使用 format! 替代? - kopecs
我自己对Rust还很陌生,但我不认为 println! 返回一个字符串。你觉得 let hello = String::from("Hello, world!"); 怎么样? - Sheraff
谢谢!我漏掉了第三个参数 write!(output, "{}", line); - turtle
1个回答

20

write!是一个宏,类似于print!。 它期望2个或更多参数,第一个参数是编写器,第二个参数是格式字符串(必须是字符串文字),之后可以有零个或多个表达式,这些表达式将被放置在格式字符串中的占位符中。

因此,您可以像这样组合最后两行:

fn main() -> std::io::Result<()> {
    let path = "results.txt";
    let mut output = File::create(path)?;
    let line = "hello";
    write!(output, "{}", line)
}

写入Writer的其他方法包括调用std::io ::Write ::write_all,或直接将切片写入文件,可以使用std::fs::write

另一个需要注意的问题是,print! 宏不会以字符串的形式返回输出,而是将输出打印到stdout中。 如果要在字符串中获取格式化后的结果,请使用format!宏:

let my_string = format!("Hello {}", "world");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接