private void CopiarImagenes() { this.Procesando = true; int iErrores = 0; this.pgbActualizacion.Value = 0; this.pgbActualizacion.Maximum = this.lsvArchivos.Items.Count; foreach (ListViewItem oItem in this.lsvArchivos.Items) { string sArchivo = oItem.SubItems[0].Text; string sRutaRelativa = sArchivo.Replace(Inicio.RutaAct, ""); // Se intenta hacer la copia try { File.Copy(sArchivo, (this.RutaImgLocal + sRutaRelativa), true); oItem.SubItems.Add("Copiado"); oItem.ForeColor = Color.Green; } catch (Exception ex) { oItem.SubItems.Add("Error"); oItem.SubItems.Add(ex.Message); oItem.ForeColor = Color.Red; iErrores++; } this.pgbActualizacion.PerformStep(); Application.DoEvents(); } if (iErrores > 0) { this.btnAccion.Text = "Reintentar"; } else { // Se guarda el dato de la última actualización UtilLocal.GuardarValorArchivoParametros((this.RutaImgLocal + ActImagenes.ArchivoUltimaActualizacion) , ActImagenes.ParametroUltimaActualizacion, DateTime.Now.ToString()); } this.Procesando = false; }
public static void GuardarValorArchivoParametros(string sArchivo, string sParametro, string sValor) { var oParametros = UtilLocal.LeerArchivoParametros(sArchivo); if (oParametros == null) { oParametros = new Dictionary <string, string>(); } oParametros[sParametro] = sValor; // Se forman las líneas var oLineas = new List <string>(); foreach (var oReg in oParametros) { oLineas.Add(oReg.Key + "=" + oReg.Value); } // Se escriben todos los datos File.WriteAllLines(sArchivo, oLineas); }
static void Main(string[] aArgumentos) { // Se procesan los parámetros var oArgs = UtilLocal.ProcesarArgumentos(aArgumentos); if (oArgs.ContainsKey("h")) { string sAyuda = @" Programa utilizado para actualizar la aplicación Theos Parámetros: -h: Mostrar esta ventana de ayuda -t: Tipo de apertura ap: Actualizar aplicación Theos img: Actualizar imágenes -r: Ruta donde se encuentran los archivos de actualización, tanto de 'ap' como de 'img' -exe: Nombre del archivo ejecutable de Theos "; MessageBox.Show(sAyuda, "Ayuda", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Se verifican los parámetros if (!oArgs.ContainsKey("t") || !oArgs.ContainsKey("r")) { MessageBox.Show("No se ha especificado la ruta de la Actualización.", "Parámetros incorrectos", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } string sTipoAc = oArgs["t"].ToLower(); // Se corrige un caso extraño que se da al obtener el argumento if (oArgs["r"].EndsWith("\"")) { oArgs["r"] = oArgs["r"].Substring(0, oArgs["r"].Length - 1); } Inicio.RutaAct = UtilLocal.AgregarSeparadorDeCarpeta(oArgs["r"]); Inicio.RutaLocal = UtilLocal.AgregarSeparadorDeCarpeta(Directory.GetCurrentDirectory()); // Inicio.RutaLocal = @"C:\tmp\CR\Ejec\"; // Para pruebas Inicio.Ejecutable = (oArgs.ContainsKey("exe") ? oArgs["exe"] : "THEOS.exe"); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // Se ejecuta la acción, según el parámetros específicado if (sTipoAc == "ap") { Application.Run(new Principal()); // Se intenta abrir la aplicación principal (Theos) if (Inicio.ActualizacionCorrecta) { Process.Start(Inicio.RutaLocal + Inicio.Ejecutable); } } else { // Se obtiene la ruta local de las imágenes string sConfig = (Inicio.Ejecutable + ".config"); if (!File.Exists(sConfig)) { UtilLocal.MensajeError("Error al abrir el archivo de configuración.", "Error"); return; } string sRutaImg = UtilLocal.ObtenerValorDeXml(sConfig, "//configuration/applicationSettings/Refaccionaria.App.Properties.Settings/setting[@name='RutaImagenes']"); if (sRutaImg == null) { UtilLocal.MensajeError("Error al acceder al parámetro de 'RutaImagenes' del archivo de configuración.", "Error"); return; } sRutaImg = UtilLocal.AgregarSeparadorDeCarpeta(sRutaImg); // sRutaImg = new System.Configuration.AppSettingsReader().GetValue("RutaImagenes", typeof(string)).ToString(); var frmActImg = new ActImagenes() { RutaImgLocal = sRutaImg }; Application.Run(frmActImg); } }
private void ObtenerDiferencias() { this.Procesando = true; this.lblMensaje.Visible = true; // Se obtiene la fecha de la última actualización DateTime dUltAct = DateTime.MinValue; if (File.Exists(this.RutaImgLocal + ActImagenes.ArchivoUltimaActualizacion)) { var aInfo = UtilLocal.LeerArchivoParametros(this.RutaImgLocal + ActImagenes.ArchivoUltimaActualizacion); if (aInfo.ContainsKey(ActImagenes.ParametroUltimaActualizacion)) { dUltAct = UtilLocal.FechaHora(aInfo[ActImagenes.ParametroUltimaActualizacion]); } } // var oDiferencias = new List<string>(); // var oImgAct = new DirectoryInfo(Inicio.RutaAct).GetFiles().Where(c => c.Extension == "jpg" && (c.CreationTime > dUltAct || c.LastWriteTime > dUltAct)); // var aImgLoc = Directory.GetFiles(this.RutaImgLocal); // var oImgAct = new DirectoryInfo(Inicio.RutaAct).GetFiles(); // var oImgLoc = new DirectoryInfo(this.RutaImgLocal).GetFiles(); /* this.pgbActualizacion.Maximum = aImgAct.Length; * * string sLocal = ""; * foreach (string sActual in aImgAct) * { * if (aImgLoc.Contains(this.RutaImgLocal + Path.GetFileName(sActual))) * { * sLocal = aImgLoc.First(c => c == (this.RutaImgLocal + Path.GetFileName(sActual))); * } * else * { * oDiferencias.Add(sActual); * this.pgbActualizacion.PerformStep(); * continue; * } * * if (File.OpenRead(sLocal).Length != File.OpenRead(sActual).Length) * oDiferencias.Add(sActual); * * this.pgbActualizacion.PerformStep(); * Application.DoEvents(); * } * * // Se listan las diferencias * foreach (string sImagen in oDiferencias) * this.lsvArchivos.Items.Add(sImagen); */ // Nueva forma Application.DoEvents(); var oDiferencias = new DirectoryInfo(Inicio.RutaAct).GetFiles("*.jpg").Where(c => (c.CreationTime > dUltAct || c.LastWriteTime > dUltAct)).ToList(); this.pgbActualizacion.Maximum = oDiferencias.Count; // Se listan las diferencias foreach (var oReg in oDiferencias) { this.lsvArchivos.Items.Add(oReg.FullName); this.pgbActualizacion.PerformStep(); Application.DoEvents(); } // this.lblMensaje.Visible = false; // Se comienzan a copiar los archivos necesarios this.CopiarImagenes(); this.Procesando = false; }