John-Hong 2 роки тому
батько
коміт
ad506df386

+ 3 - 0
src-tauri/Cargo.toml

@@ -32,6 +32,9 @@ data-encoding = "2.3.3"
 sha2 = "0.10"
 digest = "0.10.6"
 hex = "0.4.3"
+file_diff = "1.0.0"
+strsim = "0.10.0"
+diff = "0.1"
 
 [workspace]
 #members = ["modules"]

+ 108 - 3
src-tauri/src/event_loop.rs

@@ -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);
+
+*/
 }

+ 2 - 1
src/pages/FileSort/FileSort.tsx

@@ -11,7 +11,8 @@ export default function FileSort() {
       multiple: false,
       //   defaultPath: await appDataDir(),
     });
-    setFile([...fileStr, await invoke("file_sort", { path: selected })]);
+    await invoke("file_sort", { path: selected });
+    // setFile([...fileStr, await invoke("file_sort", { path: selected })]);
   }
   return (
     <div className={styles.FileSortBox}>

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
文件相似度对比_new.md


Різницю між файлами не показано, бо вона завелика
+ 0 - 0
文件相似度对比_old.md


Деякі файли не було показано, через те що забагато файлів було змінено