File::createとwrite_allで元のデータは上書かれる。
例えば、元データが4行で、上書きデータが2行だった場合でも、上書き後は2行になる。
{"family":"john","first":"fox"}
{"family":"adam","first":"can"}
{"family":"john","first":"fox"}
{"family":"adam","first":"can"}
use serde::{Serialize, Deserialize};
use std::path::Path;
use std::fs::{File};
use std::io::{Write};
#[derive(Serialize, Deserialize, Clone, Debug)]
struct Name {
family: String,
first: String,
}
#[tokio::main]
async fn main() {
let name1 = Name {family:"yamada".to_string(), first: "taro".to_string()};
let name2 = Name {family:"sato".to_string(), first: "kazuki".to_string()};
let mut vect: Vec<Name> = Vec::new();
vect.push(name1);
vect.push(name2);
let file_path = format!("./data/names.txt");
let mut file = File::create(file_path.clone()).unwrap();
for name in vect {
let serialized: Vec<u8> = serde_json::to_vec(&name).unwrap();
file.write_all(&serialized).expect("write failed");
file.write_all(b"\n").expect("write failed");
}
println!("done");
}
{"family":"yamada","first":"taro"}
{"family":"sato","first":"kazuki"}
なるほどね!