public override void ExportSingleCover(object idRecord) { string ID = idRecord.ToString(); int IDMAIN = int.Parse(ID.Substring(ID.IndexOf("_") + 1)); //int IDMAIN = (int)idRecord; string LoginPath = @"\\" + AppSettings.IPAddressFileServer + @"\BookAddInf"; using (new NetworkConnection(LoginPath, new NetworkCredential(AppSettings.LoginFileServerReadWrite, AppSettings.PasswordFileServerReadWrite))) { string NewPath = VuFindConverter.GetCoverExportPath(this.Fund + "_" + IDMAIN); string path = @"\\" + AppSettings.IPAddressFileServer + @"\BookAddInf\" + Fund.ToUpper() + @"\" + NewPath; DirectoryInfo di = new DirectoryInfo(path); if (!di.Exists) { di.Create(); } FileInfo[] ExistingCovers; ExistingCovers = di.GetFiles(); List <string> MD5Hashes = new List <string>(); foreach (FileInfo file in ExistingCovers) { MD5Hashes.Add(Extensions.CalculateMD5(file.FullName));//собираем хэши существующих обложек } //BJDatabaseWrapper wrapper = new BJDatabaseWrapper(Fund); DataTable pics = BJLoader.GetImage(IDMAIN); foreach (DataRow pic in pics.Rows)//Копируем считанные из базы обложки на файловое хранилище { byte[] p = (byte[])pic["PIC"]; Image img; using (MemoryStream ms = new MemoryStream(p)) { img = Image.FromStream(ms); } StringBuilder fileName = new StringBuilder(); fileName.Append(path).Append("cover.").Append("jpg"); //вроде в базе bj все обложки jpg... if (!File.Exists(path + "cover.jpg")) //если нет файла с таким именем, значит нет обложки. сразу сохраняем { //img.Save(path + "cover.jpg"); using (FileStream fs = new FileStream(path + "cover.jpg", FileMode.Create, FileAccess.Write)) { fs.Write(p, 0, p.Length); fs.Flush(); } if (img != null) { img.Dispose(); } continue; } else { //там уже могут лежать какие-то поэтому надо сравнивать MD5 хэши, чтобы дублей не запилить string imgMD5 = Extensions.CalculateMD5(p); if (MD5Hashes.Contains(imgMD5))//нашлась такая же обложка, значит её не сохраняем и пропускаем { if (img != null) { img.Dispose(); } continue; } while (true)//если до сюда дошло, значит надо сохранить во что бы то ни стало { int i = 0; if (!File.Exists(path + (++i).ToString() + ".jpg")) { string filename = path + (i).ToString() + ".jpg"; //img.Save(filename, ImageFormat.Jpeg); using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write)) { fs.Write(p, 0, p.Length); fs.Flush(); } break; } } } if (img != null) { img.Dispose(); } } } }