我无法将一些字符串写入 .txt 文件而不相互覆盖
这是一个例子:
for i in 1..100{
fs::write("*PATH*", i.to_string()).expect("Unable to write file");
}
Run Code Online (Sandbox Code Playgroud)
我认为它应该一个接一个地写下每一个单曲,但事实并非如此!它会覆盖,当我打开文档时,它只是最后写入的数字。
我在网上找不到任何东西,因为这种写入文件的方式似乎相当新。
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)