rust

String #

fn main()
{
	//String和&str的区别可自行百度
	//空字符串
	let s=String::new();
	//可变字符串
	let mut s1=String:from("123");
	//追加字符串
	s1.push_str("456");
	//追加字符
	s1.push("1");
}

文件读写 #

读文件 #

use std::{fs::File, io::Read};

fn main(){

	//使用create如果文件不存在则创建,存在则会覆盖源文件(网上所说是会)
	//如果使用open,没有也是会报错
    let mut file=File::create("test.txt").expect("open error");
    let mut s=String::new();
    let _ = file.read_to_string(&mut s);
    print!("{:#?}",s);
}

写文件 #

use std::io::Write;
fn main() {
   let mut file = std::fs::File::create("data.txt").expect("create failed");
   file.write_all("12345".as_bytes()).expect("write failed");
   file.write_all("hello world".as_bytes()).expect("write failed");
}

追加数据 #

use std::fs::OpenOptions;
use std::io::Write;

fn main() {
   let mut file = OpenOptions::new().append(true).open("data.txt").expect("cannot open file");
   file.write_all("123".as_bytes()).expect("write failed");
   file.write_all("456".as_bytes()).expect("write failed");
   file.write_all("789".as_bytes()).expect("write failed");
}

删除文件 #

use std::fs;
fn main() {
   fs::remove_file("data.txt").expect("could not remove file");
   println!("file is removed");
}

文件是否存在 #

fn main(){  
	let file_path = Path::new(path_to_file);  
	if file_path.exists() {  
		println!("文件存在");  
	}else {  
		println!("文件不存在");  
	}  
}

json #

use std::fs::File;

use serde_json::Value;
fn main(){
	//解析io流文件
    let f=File::open("test.txt").unwrap();
    let json:Value=serde_json::from_reader(f).unwrap();
    //let json:Value=serde_json::from_str(text).unwrap();
    for i in json["data"].as_array().unwrap(){
        println!("{}",i["name"].as_str().unwrap());
    }
	//快速定义
	let json_object=json!({"total":123,"data":[]);
}

reqwest #


use std::{time::{SystemTime, UNIX_EPOCH}};

fn get_time() -> String{
    SystemTime::now()
        .duration_since(UNIX_EPOCH)
        .unwrap()
        .as_millis()
        .to_string()
}



async fn post() -> Result<String, reqwest::Error>{
    let client = reqwest::Client::new();
    // let mut headers = HeaderMap::new();
    // headers.insert("Content-Type", "application/json".parse().unwrap());

    let time=get_time();
    let data=[("phone","17340307464"),("password","d41d8cd98f00b204e9800998ecf8427e"),("countrycode",""),("rememberLogin","true"),("timerstamp",&time)];
    Ok(client.post("https://music.163.com/weapi/login/cellphone").json(&data).send().await?.text().await?)
}

#[tokio::main]
async fn main() {
    if let Ok(res) = post().await {
        println!("{:#?}", res);
    }
}

集合相关 #

fn main() {
    let a = vec![(2, "aa"), (4, "c"), (3, "cc")];
    let b = vec![(3, "cc"), (5, "ee"), (2, "aa")];
 
    // 取交集
    let intersect = a.iter().filter(|&u| b.contains(u)).collect::<Vec<_>>();
    println!("a 和 b 交集是:{:?}", intersect);
 
    // 取差集
    let minusion = a.iter().filter(|&u| !b.contains(u)).collect::<Vec<_>>();
    println!("a 和 b 差集是:{:?}", minusion);
 
    // 取并集
    let union = a
        .iter()
        .filter(|&u| !b.contains(u))
        .chain(&b)
        .collect::<Vec<_>>();
    println!("a 和 b 并集是:{:?}", union);
 
    // 取补集
    let complement = a
        .iter()
        .filter(|&u| !b.contains(u))
        .chain(b.iter().filter(|&u| !a.contains(u)))
        .collect::<Vec<_>>();
    println!("a 和 b 补集是:{:?}", complement);
}

hashmap #

hashmap 补集

fn diff_hashmap(map1:&HashMap<String,Music>,map2:&HashMap<String,Music>)->HashMap<String,Music>{
    let mut m=HashMap::new();
    for(k,v) in map1{
        if !map2.contains_key(k) {
            m.insert(k.clone(), v.clone());
        }
    }

    for (k,v) in map2 {
        if !map1.contains_key(k) {
            m.insert(k.clone(), v.clone());
        }
    }m
}

lyric and add_pic


use metaflac::Tag;
use metaflac::block::PictureType::Media;

#[tokio::main]
async fn main() -> Result<(), reqwest::Error>{
    let lyc="[00:09.74]群青色の空\n[00:11.88]自由なんてものは\n[00:14.02]手を伸ばすほどに遠く遠く飛んでく\n[00:16.80]ほら、海猫の歌が僕を笑っているんだ\n[00:21.28]夏の島に縛られた十六年間\n[00:25.08]長い前髪も伸び過ぎて捨てられたあの日みたい\n[00:29.32]どんな愛情も\n[00:30.50]ねえ、たったひと切れのパンより軽い(ライト)\n[00:32.80]生きているよ\n[00:34.43]神様にもきっと見捨てられている僕でも\n[00:40.10]追い風に白い帆を上げよう\n[00:43.92]君が留まり僕がゆくなら\n[00:47.76]いつか遠い海で会えるんだろう\n[00:51.56]きっとこの星はまあるいから\n[00:55.40]追い風に白い帆を上げよう\n[00:59.14]君が留まり僕がゆくなら\n[01:02.88]いつか遠い海で会えるんだろう\n[01:06.78]きっとこの星はまあるいから\n[01:25.62]潮の香りが染み込んでいる日だ\n[01:29.76]薄汚れた白い背中を押す風が吹いた\n[01:33.68]もし叶うなら愛されたいな\n[01:37.52]あたたかな胸に頰を埋め眠りたいな\n[01:41.38]雲を追うよ、風を切るマスト\n[01:45.02]僕を乗せた船はどこまでも\n[01:48.72]黄金島にもゆけるよ\n[01:50.60]地図はないけど\n[01:52.32]さあ、人魚たちの歌に手を叩こう\n[01:56.54]ナナナ……\n[02:11.53]追い風に白い帆を上げよう\n[02:15.30]君が留まり僕がゆくなら\n[02:19.16]いつか遠い海で会えるんだろう\n[02:22.92]きっとこの星はまあるいから\n[02:26.94]追い風に白い帆を上げよう\n[02:30.48]君が留まり僕がゆくなら\n[02:34.24]いつか遠い海で会えるんだろう\n[02:38.16]きっとこの星はまあるいから\n[02:47.54]まあるいから\n[02:55.42]まあるいから\n";
    let mut tag = Tag::read_from_path("C:/test/rust/demo1/file/wcat.flac").unwrap();
    
    let data=reqwest::get("https://p2.music.126.net/mog628G4JLNEMi-GpWxccQ==/109951164647211717.jpg").await?.bytes().await?.to_vec();
    
    tag.add_picture("image/jpeg", Media, data);

    let comment=tag.vorbis_comments_mut();

    comment.set_lyrics(vec![lyc]);

    tag.save().unwrap();
    Ok(())
}