private void LogInfo(ShowParseFileInfo ShowInfo, string text) { if (ShowInfo != null) { ShowInfo(text); } }
private void CalcFileMD5(PDFFileModel model, ShowParseFileInfo ShowInfo) { int count = 0; for (int i = 0; i < model.Files.Count; i++) { if (model.Files[i].md5 == null || model.Files[i].md5 == string.Empty) { count++; } } int index = 0; MD5 md5 = MD5.Create(); for (int i = 0; i < model.Files.Count; i++) { if (model.Files[i].md5 != null && model.Files[i].md5 != string.Empty) { continue; } if (ShowInfo != null) { string info = string.Format("共{0}个文件,正在计算第{1}个文件", count, index++); ShowInfo(info); } GetFileMeta(model.Files[i], md5); } }
public PDFFileModel BuildNewData(string path, ShowParseFileInfo ShowInfo) { if (!Directory.Exists(path)) { return(null); } PDFFileModel model = ListFiles(path); CalcFileMD5(model, ShowInfo); return(model); }
public void MergeDirctory(string from, string to, string MidDir, ShowParseFileInfo ShowInfo) { PDFFileModel model = null; if (to != null) { model = ListFiles(to); CalcFileMD5(model, ShowInfo); } else { model = Global.Model; } HashSet <string> set = new HashSet <string>(); for (int i = 0; i < model.Files.Count; i++) { set.Add(model.Files[i].md5); } model = ListFiles(from); CalcFileMD5(model, ShowInfo); List <int> toMerge = new List <int>(); for (int i = 0; i < model.Files.Count; i++) { if (!set.Contains(model.Files[i].md5)) { toMerge.Add(i); } } for (int i = 0; i < toMerge.Count; i++) { if (MidDir[MidDir.Length - 1] != '\\' && MidDir[MidDir.Length - 1] != '/') { MidDir += '/'; } string origFile = model.Files[toMerge[i]].filePath; string fileDestPath = MidDir + Path.GetFileName(origFile); File.Copy(origFile, fileDestPath); File.Copy(origFile + ".met", fileDestPath + ".met"); } }
// 更新数据 // 文件的增加和删除 public void UpdateData(ShowParseFileInfo ShowInfo) { LogInfo(ShowInfo, "list all files..."); PDFFileModel newModel = ListFiles(Global.Model.Path); LogInfo(ShowInfo, "comparing..."); Dictionary <string, UpdateFileInfo> oldFiles = new Dictionary <string, UpdateFileInfo>(); for (int i = 0; i < Global.Model.Files.Count; i++) { FileData f = Global.Model.Files[i]; UpdateFileInfo info = new UpdateFileInfo(); info.fileIndex = i; info.matched = false; oldFiles.Add(f.filePath, info); } // find deleted files and new files List <int> newFileIndex = new List <int>(); Dictionary <int, int> oldToNewIndex = new Dictionary <int, int>(); for (int i = 0; i < newModel.Files.Count; i++) { FileData f = newModel.Files[i]; UpdateFileInfo info; if (oldFiles.TryGetValue(f.filePath, out info)) { info.matched = true; oldToNewIndex.Add(info.fileIndex, i); f.md5 = Global.Model.Files[info.fileIndex].md5; f.size = Global.Model.Files[info.fileIndex].size; } else { newFileIndex.Add(i); } } LogInfo(ShowInfo, "delete files..."); foreach (KeyValuePair <string, UpdateFileInfo> p in oldFiles) { if (!p.Value.matched) { DeleteFile(p.Value.fileIndex); } } LogInfo(ShowInfo, "add new files..."); CalcFileMD5(newModel, ShowInfo); LogInfo(ShowInfo, "remap lable..."); RemapFiles(oldToNewIndex); LogInfo(ShowInfo, "ok!"); newModel.Lables = Global.Model.Lables; Global.Model = newModel; string time = DateTime.Today.ToShortDateString() + " "; time += DateTime.Now.ToShortTimeString(); time = time.Replace('/', '_').Replace(':', '_'); string logFileName = Config.ProjectPath + "\\" + time + ".log"; FileStream fs = new FileStream(logFileName, FileMode.Create, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); int count = 0; sw.WriteLine("delete files"); foreach (KeyValuePair <string, UpdateFileInfo> p in oldFiles) { if (!p.Value.matched) { sw.WriteLine(p.Key); count++; } } sw.WriteLine("{0} files deleted", count); sw.WriteLine(); sw.WriteLine("added files"); for (int i = 0; i < newFileIndex.Count; i++) { FileData f = newModel.Files[newFileIndex[i]]; sw.WriteLine(f.filePath); } sw.WriteLine("{0} files added", newFileIndex.Count); sw.Close(); fs.Close(); }