123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Security.Cryptography;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using WechatPCMsgBakTool.Model;
- namespace WechatPCMsgBakTool
- {
- public class WXWorkspace
- {
- private UserBakConfig UserBakConfig = new UserBakConfig();
- public WXWorkspace(string path) {
- string checkResult = Init(path);
- if (checkResult != "")
- new Exception(checkResult);
- }
- public WXWorkspace(UserBakConfig userBakConfig)
- {
- UserBakConfig = userBakConfig;
- }
- public void MoveDB()
- {
- string sourceBase = Path.Combine(UserBakConfig.UserResPath, "Msg");
- string sourceMulit = Path.Combine(UserBakConfig.UserResPath, "Msg/Multi");
- string[] files = Directory.GetFiles(sourceBase);
- foreach (string file in files)
- {
- FileInfo fileInfo = new FileInfo(file);
- if(fileInfo.Extension == ".db")
- {
- string to_path = Path.Combine(UserBakConfig.UserWorkspacePath, "OriginalDB", fileInfo.Name);
- File.Copy(file, to_path, true);
- }
- }
- files = Directory.GetFiles(sourceMulit);
- foreach (string file in files)
- {
- FileInfo fileInfo = new FileInfo(file);
- if (fileInfo.Extension == ".db")
- {
- string to_path = Path.Combine(UserBakConfig.UserWorkspacePath, "OriginalDB", fileInfo.Name);
- File.Copy(file, to_path, true);
- }
- }
- }
- public static void SaveConfig(UserBakConfig userBakConfig)
- {
- if(userBakConfig.UserWorkspacePath != "")
- {
- DirectoryInfo directoryInfo = new DirectoryInfo(userBakConfig.UserWorkspacePath);
- if(directoryInfo.Parent != null)
- {
- string json_path = Path.Combine(directoryInfo.Parent.FullName, userBakConfig.UserName + ".json");
- string json = JsonConvert.SerializeObject(userBakConfig);
- File.WriteAllText(json_path, json);
- }
- }
- }
- private string Init(string path)
- {
- string curPath = AppDomain.CurrentDomain.BaseDirectory;
- string md5 = GetMd5Hash(path);
- string[] paths = path.Split(new string[] { "/", "\\" }, StringSplitOptions.None);
- string username = paths[paths.Length - 1];
- UserBakConfig.UserResPath = path;
- UserBakConfig.UserWorkspacePath = Path.Combine(curPath, "workspace", md5);
- UserBakConfig.Hash = md5;
- UserBakConfig.UserName = username;
- if (!Directory.Exists(UserBakConfig.UserResPath))
- {
- return "用户资源文件夹不存在,如需使用离线数据,请从工作区读取";
- }
- if (!Directory.Exists(UserBakConfig.UserWorkspacePath))
- {
- Directory.CreateDirectory(UserBakConfig.UserWorkspacePath);
- }
- string db = Path.Combine(UserBakConfig.UserWorkspacePath, "OriginalDB");
- string decDb = Path.Combine(UserBakConfig.UserWorkspacePath, "DecDB");
- if (!Directory.Exists(db))
- {
- Directory.CreateDirectory (db);
- }
- if (!Directory.Exists(decDb))
- {
- Directory.CreateDirectory(decDb);
- }
- SaveConfig(UserBakConfig);
- return "";
- }
- private static string GetMd5Hash(string input)
- {
- using (MD5 md5Hash = MD5.Create())
- {
- // Convert the input string to a byte array and compute the hash.
- byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
- // Create a new Stringbuilder to collect the bytes
- // and create a string.
- StringBuilder sBuilder = new StringBuilder();
- // Loop through each byte of the hashed data
- // and format each one as a hexadecimal string.
- for (int i = 0; i < data.Length; i++)
- {
- sBuilder.Append(data[i].ToString("x2"));
- }
- // Return the hexadecimal string.
- return sBuilder.ToString();
- }
- }
- }
- }
|