|
@@ -77,6 +77,7 @@ pub fn file_path(name: &str, parentid: &str) -> String {
|
|
|
|
|
|
use sha2::{Digest, Sha256};
|
|
|
use std::{fs, io};
|
|
|
+use tauri::api::http::FormPart::File;
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
struct UseHashInfoStruct {
|
|
@@ -103,9 +104,113 @@ fn get_file_hase(path: &str) -> UseHashInfoStruct {
|
|
|
info
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+fn read_file(path: &str) -> io::Result<Vec<u8>> {
|
|
|
+ use std::fs::File;
|
|
|
+ use std::io::{self, Read};
|
|
|
+ let mut file = File::open(path)?;
|
|
|
+ let mut bytes = Vec::new();
|
|
|
+ file.read_to_end(&mut bytes)?;
|
|
|
+ Ok(bytes)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+fn create_file(path: &str, buf: &str) -> io::Result<()> {
|
|
|
+ use std::fs::File;
|
|
|
+ use std::io::{self, Write};
|
|
|
+ let mut file = File::create(path)?;
|
|
|
+ // let file_byts = read_file("/Users/sysadmin/Downloads/文件相似度对比_new.pdf")?;
|
|
|
+ file.write_all(buf.as_bytes())?;
|
|
|
+ Ok(())
|
|
|
+}
|
|
|
+
|
|
|
+fn jaccard(str1: &str, str2: &str) -> f64 {
|
|
|
+ let set1: std::collections::HashSet<char> = str1.chars().collect();
|
|
|
+ let set2: std::collections::HashSet<char> = str2.chars().collect();
|
|
|
+ let intersection: std::collections::HashSet<char> = set1.intersection(&set2).map(|c| *c).collect();
|
|
|
+ let union: std::collections::HashSet<char> = set1.union(&set2).map(|c| *c).collect();
|
|
|
+ println!("134: {}, {}", intersection.len() as f64 , union.len() as f64);
|
|
|
+ return intersection.len() as f64 / union.len() as f64;
|
|
|
+}
|
|
|
+
|
|
|
#[tauri::command(name = "file_sort")]
|
|
|
-pub fn file_sort(path: &str) -> String {
|
|
|
+// pub fn file_sort(path: &str) -> String {
|
|
|
+pub fn file_sort(path: &str) {
|
|
|
+ use file_diff::{diff_files};
|
|
|
+ use std::io;
|
|
|
+ use std::io::prelude::*;
|
|
|
+ use std::fs::File;
|
|
|
+ use strsim::damerau_levenshtein;
|
|
|
+
|
|
|
+ // use strsim::{jaccard};
|
|
|
let hash_info = get_file_hase(&path);
|
|
|
- println!("{:?}", hash_info.path);
|
|
|
- format!("{{ 'path': {},'processed': {},'hash': {} }}`", hash_info.path, hash_info.processed, hash_info.hash)
|
|
|
+ // let mut file1 = match fs::File::open("/Users/sysadmin/Downloads/文件相似度对比_old.pdf") {
|
|
|
+ // Ok(f) => f,
|
|
|
+ // Err(e) => panic!("{}", e),
|
|
|
+ // };
|
|
|
+ // let mut f1 = File::open("/Users/sysadmin/Downloads/文件相似度对比_old.pdf").unwrap();
|
|
|
+ // let mut f2 = File::open("/Users/sysadmin/Downloads/文件相似度对比_new.pdf").unwrap();
|
|
|
+ // let mut buffer: [u64; 410] = [400; 410];
|
|
|
+
|
|
|
+ // read up to 10 bytes
|
|
|
+ // let n1 = f1.read(&mut buffer[..]).unwrap();
|
|
|
+ // let n2 = f2.read(&mut buffer[..]).unwrap();
|
|
|
+ let bytes = read_file("/Users/sysadmin/Downloads/文件相似度对比_old.pdf").unwrap();
|
|
|
+ let mut bytes_str = format!("{:?}", bytes);
|
|
|
+ // create_file("/Users/sysadmin/Downloads/文件相似度对比_old.md", &bytes_str);
|
|
|
+ // let bytes2 = read_file("/Users/sysadmin/Downloads/文件相似度对比_new.pdf").unwrap();
|
|
|
+ let bytes2 = read_file("/Users/sysadmin/Downloads/截屏2022-11-30 上午10.00.17 2.png").unwrap();
|
|
|
+ let mut bytes2_str = format!("{:?}", bytes2);
|
|
|
+ // create_file("/Users/sysadmin/Downloads/文件相似度对比_new.md", &bytes2_str);
|
|
|
+
|
|
|
+
|
|
|
+ // File.
|
|
|
+ // let similarity = jaccard(bytes_str, bytes2_str);
|
|
|
+ // println!("Jaccard similarity: {}", damerau_levenshtein(&bytes_str, &bytes2_str));
|
|
|
+ println!("Jaccard damerau_levenshtein: {}", jaccard(&bytes_str, &bytes2_str));
|
|
|
+ // create_file("/Users/sysadmin/Downloads/文件相似度对比_old.md", &bytes_str);
|
|
|
+
|
|
|
+ // println!("The bytes_文件相似度对比_new: {:?}", bytes);
|
|
|
+ // println!("The bytes: {:?}", &buffer[..n2]);
|
|
|
+
|
|
|
+
|
|
|
+ // let mut buffer = [0; 10];
|
|
|
+ // // read up to 10 bytes
|
|
|
+ // let n = file1.read(&mut buffer[..]).unwrap();
|
|
|
+ // println!("The bytes: {:?}", &buffer[..n]);
|
|
|
+
|
|
|
+
|
|
|
+ // let mut file2 = match fs::File::open("/Users/sysadmin/Downloads/文件相似度对比_old.pdf") {
|
|
|
+ // Ok(f) => f,
|
|
|
+ // Err(e) => panic!("{}", e),
|
|
|
+ // };
|
|
|
+
|
|
|
+ // diff_files(&mut file1, &mut file2);
|
|
|
+ // println!("diff_files_ {:?}", diff_files(&mut file1, &mut file2));
|
|
|
+ // println!("diff_files_ {:?}", file1.as_inner());
|
|
|
+ // println!("{:?}", hash_info);
|
|
|
+ // format!("{{ 'path': {},'processed': {},'hash': {} }}`", hash_info.path, hash_info.processed, hash_info.hash)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+
|
|
|
+ 实现
|
|
|
+ function jaccard(str1, str2) {
|
|
|
+ let set1 = new Set(str1.split(''));
|
|
|
+ let set2 = new Set(str2.split(''));
|
|
|
+ let intersection = new Set([...set1].filter(x => set2.has(x)));
|
|
|
+ let union = new Set([...set1, ...set2]);
|
|
|
+ return intersection.size / union.size;
|
|
|
+}
|
|
|
+
|
|
|
+let str1 = "hello";
|
|
|
+let str2 = "world";
|
|
|
+let similarity = jaccard(str1, str2);
|
|
|
+console.log("Jaccard similarity: " + similarity);
|
|
|
+
|
|
|
+*/
|
|
|
}
|