private void Insert(FileInfo pcb, string fechaModificacion) { // Si no existe genero un Hash que identifica el contenido del archivo. // mas adelante se compara el hash nuevo con el anterior para verificar // si se modifico alguna linea. string pcbContent = FilesHandler.ReadFile(pcb.FullName); string newHash = PcbInfo.Hash(pcb.FullName); List <string> buildSegmentos = BuildSegment(pcbContent); int totalBloques = buildSegmentos.Count; string segmentos = string.Join(",", buildSegmentos.ToArray()); PcbInfo pcbInfo = new PcbInfo(); pcbInfo.programa = pcb.Name; pcbInfo.bloques = totalBloques; pcbInfo.segmentos = segmentos; pcbInfo.hash = newHash; pcbInfo.tipoMaquina = aoi.aoiConfig.machineNameKey; pcbInfo.fechaModificacion = fechaModificacion; PcbInfo.Insert(pcbInfo); }
/// <summary> /// Verifica y actualiza si es necesario la informacion de todas las PCB de VTWIN y RNS /// </summary> public bool VerifyPcbFiles() { // Verifico archivos PCB IOrderedEnumerable <FileInfo> pcbList = FilesHandler.GetFiles("*.pcb", aoi.aoiConfig.dataProgPath); int totalPcb = pcbList.Count(); bool reload = false; aoi.aoiWorker.SetProgressTotal(totalPcb); #region PCBLIST_FILES_DETECTED if (totalPcb > 0) { int countPcb = 0; foreach (FileInfo pcb in pcbList) { //if (pcb.Name.Equals("NT1010E-M-BOT-SBAST-LR.pcb")) //{ // countPcb = 12344; //} countPcb++; string fechaModificacion = pcb.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"); // Verifico si existe el pcb en la base de datos. PcbInfo pcbInfo = PcbInfo.list.Find(o => o.programa.Equals(pcb.Name) && o.tipoMaquina.Equals(aoi.aoiConfig.machineNameKey) ); if (pcbInfo == null) { // Si no existe en DB, lo inserto Insert(pcb, fechaModificacion); reload = true; } else { string newHash = ""; // Si existe, verifico que la fecha sea diferente if (!pcbInfo.fechaModificacion.Equals(fechaModificacion)) { // Si la fecha de modificacion en SQL no es igual a la fecha de modificacion actual. // Comparo HASH de archivo, contra el guardado en la DB newHash = PcbInfo.Hash(pcb.FullName); if (pcbInfo.hash.Equals(newHash)) { // Si el hash es similar, no hay cambios en el archivo, solo cambia la fecha UpdateDate(pcbInfo, fechaModificacion); reload = true; } else { // Actualizo la informacion del PCB Update(pcb, pcbInfo, newHash, fechaModificacion); reload = true; } } } aoi.aoiWorker.SetProgressWorking(countPcb); } // END FOREACH } else { aoi.aoiLog.warning("No se encontraron archivos PCB en: " + aoi.aoiConfig.dataProgPath); } #endregion return(reload); }