我有一个json文件:
[
{
"name": "John",
"sirname": "Fogerty",
"age": 77
},
{
"name": "Dave",
"sirname": "Mustaine",
"age": 61
}
]
我想将User结构的对象从它读入一个数组,然后向该数组添加另一个元素,并将所有内容重写到同一个文件中。
我的代码:
use serde_derive::{Serialize, Deserialize};
use serde_json::json;
use std::fs::File;
#[derive(Serialize, Deserialize, Debug)]
struct User {
name: String,
sirname: String,
age: u8,
}
fn main() {
let f = File::open("info.json").unwrap();
let mut q: Vec<User> = serde_json::from_reader(&f).unwrap();
q.push(User{name: "Daniil".to_string(),
sirname: "Volkov".to_string(),
age: 19,
});
serde_json::to_writer(f, &q).unwrap();
println!("{:?}", q);
}
启动时出现错误:
线程"main"在"对Err
值调用Result::unwrap()
"时死机:错误("访问被拒绝。(操作系统错误5)",行:0,列:0)',源\主. rs:22:34
注意:使用RUST_BACKTRACE=1
环境变量运行以显示回溯
错误:进程没有成功退出:target\debug\json.exe
(退出代码:101段)。
我该怎么办?
1条答案
按热度按时间juud5qan1#
正如@Caesar在评论中指出的,您应该改变打开文件的方式。
你应该写上:
但是当你读文件的时候,你在文件中的位置会移动,所以在写文件之前(因为你想重写它,而不是追加),你需要重新设置位置:
就在以下行之前: