我以为你只是打开一个文件并寻找你要覆盖的位置并开始写,但似乎它只在该位置添加了字节.如何从文件中删除字节或覆盖字节?
一个例子:
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();
}
Run Code Online (Sandbox Code Playgroud)
输出文件之前:
00000000: 0102 0304 0a .....
Run Code Online (Sandbox Code Playgroud)
输出文件后:
00000000: 0102 0304 0102 0304 0a .........
Run Code Online (Sandbox Code Playgroud)
如您所见,寻求0不会覆盖文件中已有的4个字节.相反,它会将它们预先添加到文件中.
因为你正在使用它append(true).从文档:
此选项(如果为true)表示写入将附加到文件而不是覆盖以前的内容.请注意,设置
.write(true).append(true)与仅设置具有相同的效果.append(true).
write(true)相反,使用添加写权限:
let mut file = OpenOptions::new()
.read(true)
.write(true) // <--------- this
.create(true)
.open("/tmp/file.db")
.unwrap();
Run Code Online (Sandbox Code Playgroud)
..并且您的代码将按预期工作.
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |