/// <summary> /// 快速获取文件信息 /// </summary> /// <param name="pic"></param> public static Picture.Inf FastCompute(string filename) { Picture.Inf result = new Picture.Inf(); if (System.IO.File.Exists(filename)) { result.fileName = filename; result.FileInfo = new FileInfo(result.fileName); //result.FileInfo.Extension = "jpg" result.isPhoto = true; try { using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read)) { result.SHA1 = Byte2String(SHA1(stream)); string date = GetExifDate(stream); Console.WriteLine("EXIF:{1}{0}", filename, date); if (date == "-1")//不是图片 { result.isPhoto = false; } else { DateTime.TryParse(date, out result.ExifDate); } } } catch { } } return(result); }
public static bool Add(Picture.Inf pic) { PictureList.Add(pic.SHA1, pic.fileName); return(true); }
public static void OnChange(string filename) { while (true) { if (!Files.IsFileInUse(filename)) { Console.WriteLine("{0}->文件占用释放", filename); Picture.Inf pic = Compute.FastCompute(filename); if (!pic.isPhoto)//不是图片就退出 { Console.WriteLine("不是图片"); if (deleteFile) { File.Delete(pic.fileName); Console.WriteLine("删除文件"); } return; } //Console.WriteLine("{0} {1} {2}", pic.ExifDate.ToString(), pic.SHA1, pic.FileInfo.LastWriteTime); //数据库操作(查重) Console.WriteLine("图片查重"); if (DataBase.Compared(pic.SHA1))//重复文件 { Console.WriteLine("重复文件"); if (deleteFile) { File.Delete(pic.fileName); } break; } Console.WriteLine("加入数据库"); DataBase.Add(pic); string tmpPath; if (pic.ExifDate.Year == 1)//非法日期 { tmpPath = pic.FileInfo.LastWriteTime.ToString("yyyy-MM-dd"); } else { Console.WriteLine("不是图片"); tmpPath = pic.ExifDate.ToString("yyyy-MM-dd"); } tmpPath = string.Format("{0}{1}\\", decPath, tmpPath); if (!Directory.Exists(tmpPath))//没有目录就创建目录 { Directory.CreateDirectory(tmpPath); } //尝试存储图片 string filePath = string.Format("{0}{1}", tmpPath, pic.FileInfo.Name); Console.WriteLine("新文件{0}", filePath); int i = 1; if (File.Exists(filePath)) { bool ifExists = true; while (ifExists) { filePath = string.Format("{0}{1}({2}){3}", tmpPath, pic.FileInfo.Name.Substring(0, pic.FileInfo.Name.Length - pic.FileInfo.Extension.Length), i, pic.FileInfo.Extension ); i++; Console.WriteLine("尝试新文件{0}", filePath); ifExists = File.Exists(filePath); } } bool movefile = Files.moveFile(pic.fileName, filePath, deleteFile); Console.WriteLine("{0}->{1}->{2}", pic.fileName, filePath, movefile ? "失败" : "成功"); break; } } }