gpt4 book ai didi

rust - 在 Rust 中如何修改文件的内容而不是添加到文件中?

转载 作者:行者123 更新时间:2023-11-29 07:57:22 30 4
gpt4 key购买 nike

我以为你只是打开一个文件并寻找你想要覆盖的位置并开始写入,但它似乎只在该位置添加字节。如何从文件中删除字节或覆盖字节?

一个例子:

use std::fs::OpenOptions;
use std::io::{prelude::*, Seek, SeekFrom};

fn main() {
let mut file = OpenOptions::new()
.read(true)
.append(true)
.create(true)
.open("/tmp/file.db")
.unwrap();

let bytes: [u8; 4] = [1, 2, 3, 4];

file.seek(SeekFrom::Start(0)).unwrap();
file.write_all(&bytes).unwrap();
}

之前的输出文件:

00000000: 0102 0304 0a                             .....

之后的输出文件:

00000000: 0102 0304 0102 0304 0a                   .........

如您所见,查找 0 不会覆盖文件中已有的 4 个字节。相反,它将它们添加到文件中。

最佳答案

这是因为您正在使用 append(true)。来自文档:

This option, when true, means that writes will append to a file instead of overwriting previous contents. Note that setting .write(true).append(true) has the same effect as setting only .append(true).

改用write(true),添加写入权限:

let mut file = OpenOptions::new()
.read(true)
.write(true) // <--------- this
.create(true)
.open("/tmp/file.db")
.unwrap();

..您的代码将按预期工作。

关于rust - 在 Rust 中如何修改文件的内容而不是添加到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50689785/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com