用 rust 写入文件时会写入额外的行

Extra lines getting written when writing a file with rust

我有一个struct Point {x: f64, y: f64}。我还有一个线段向量 Vec<(Point, Point)>.

我正在将行集合写入这样的文件。

let lines = make_lines();
let mut file = OpenOptions::new()
        .write(true)
        .create(true)
        .open("./points1")
        .unwrap();
for (p1, p2) in lines {
    writeln!(file, "{} {} {} {}", p1.x, p1.y, p2.x, p2.y).unwrap();
}

向量总是有 1000 行。但文件有时会写入 10001、10002 行。另外,可能相关的是那些额外的行有时有 3 个数字。

如果文件不存在我想创建,如果存在则覆盖它。

  1. 你可能遗漏了一个.truncate(true),我不确定打开现有文件时光标的位置是什么

  2. 文件绝对应该有 10001 行,因为 writeln 总是会添加一个尾随换行符,你将有一个最后的空行,这是预期的(对于 unix 文件来说是正常的)

没有复制案例就没什么可说的了,您可以尝试显式刷新/同步写入以确保它们在磁盘上,但显然您没有丢失 数据.