/// <summary> /// Добавляет запись с признаком уникальности обработанного файла /// </summary> /// <param name="taskName">Имя задачи</param> /// <param name="filePath">Путь к файлу</param> public static void CreateFileFingerprint(string taskName, string filePath) { string fileName = Path.GetFileName(filePath); FileInfo fileInfo = new FileInfo(filePath); string hash = Pbkdf2Cryptography.GetMD5Hash(File.ReadAllBytes(filePath)); string connStr = "INSERT INTO " + taskName + " (FILENAME, HASH, OPERATIONDATE, MODIFYDATE) " + string.Format("VALUES('{0}','{1}','{2}','{3}');", fileName, hash, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), fileInfo.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss")); using (FbConnection connection = new FbConnection(ConnectionString)) { connection.Open(); using (FbCommand command = new FbCommand(connStr, connection)) { using (FbTransaction transaction = connection.BeginTransaction()) { command.Transaction = transaction; command.ExecuteNonQuery(); transaction.Commit(); } } } }
/// <summary> /// Проверяет наличие дубликата файла /// </summary> /// <param name="taskName">Имя задачи</param> /// <param name="filePath">Путь к файлу</param> /// <returns></returns> public static bool CheckForDuplicate(string taskName, string filePath) { string fileName = Path.GetFileName(filePath); string hash = Pbkdf2Cryptography.GetMD5Hash(File.ReadAllBytes(filePath)); string connStr = @"SELECT 1 FROM " + taskName + @" WHERE FILENAME = '" + fileName + "' " + @"AND HASH = '" + hash + "'"; object result; using (FbConnection connection = new FbConnection(ConnectionString)) { connection.Open(); using (FbCommand command = new FbCommand(connStr, connection)) { using (FbTransaction transaction = connection.BeginTransaction()) { command.Transaction = transaction; result = command.ExecuteScalar(); transaction.Rollback(); } } } return(result != null); }