在 rust 1.26 及更高版本中,如何将多个字符串写入一个文件而不使它们相互覆盖?

AUn*_*uee 2 rust

我无法将一些字符串写入 .txt 文件而不相互覆盖

这是一个例子:

for i in 1..100{

        fs::write("*PATH*", i.to_string()).expect("Unable to write file");
}
Run Code Online (Sandbox Code Playgroud)

我认为它应该一个接一个地写下每一个单曲,但事实并非如此!它会覆盖,当我打开文档时,它只是最后写入的数字。

我在网上找不到任何东西,因为这种写入文件的方式似乎相当新。

Val*_*tin 5

File您可以在进入循环之前打开。您可以使用write!writeln!宏进一步简化对文件的写入。这允许您利用 Rust 的格式化功能,而无需显式执行i.to_string().

由于您正在执行大量(小)写入,因此还可以考虑将其包装在 a 中,BufWriter以最大限度地减少执行的总系统调用量。

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

fn main() {
    let path = "...";
    let f = File::create(path).expect("unable to create file");
    let mut f = BufWriter::new(f);

    for i in 1..100 {
        write!(f, "{}", i).expect("unable to write");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果该文件已经存在,并且您希望在每次执行程序时连续追加到该文件。然后您可以使用以下命令打开它OpenOptions并专门启用附加模式append(true)

use std::fs::OpenOptions;
use std::io::{BufWriter, Write};

fn main() {
    let path = "...";
    let f = OpenOptions::new()
        .write(true)
        .append(true)
        .open(path)
        .expect("unable to open file");
    let mut f = BufWriter::new(f);

    for i in 1..100 {
        write!(f, "{}", i).expect("unable to write");
    }
}
Run Code Online (Sandbox Code Playgroud)