예제 #1
0
        /// <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);
        }
예제 #2
0
 public static bool Add(Picture.Inf pic)
 {
     PictureList.Add(pic.SHA1, pic.fileName);
     return(true);
 }
예제 #3
0
        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;
                }
            }
        }