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(())
}