} // Fin de constructor único // =========================================================== // MÉTODO PARA EL BOTÓN DE INSERTAR REGISTRO // ----------------------------------------------------------- // Serializa el objeto desde las cajas de texto y verifica // si los datos tienen formato coherente, si está activada la // checkbox, en vez de agregarlo se sobreescribe el archivo. // =========================================================== private void InsertarBtnClick(object sender, EventArgs e) { try { // Serialización del objeto a escribir string nombre = nombreTB.Text; string ocupacion = ocupacionTB.Text; short edad = Int16.Parse(edadTB.Text); bool estaVivo = vivo.Checked; float altura = Single.Parse(alturaTB.Text); if ( /* Realizar comprobaciones preventivas */ nombre.Length > 0 && ocupacion.Length > 0 && edad > 0 && altura > 0 ) { /* Sin campos vacíos y edad/altura positivas */ Persona registro = new Persona( nombre, ocupacion, edad, estaVivo, altura ); // Fin de instanciar objeto Persona bool insertado = IOBinario.EscribirRegistro(ruta, limpiar.Checked, registro); if (insertado) { // Actualizar la vista tras insertar registro MessageBox.Show(Form.ActiveForm, "Registro insertado con éxito!"); nombreTB.Text = ""; ocupacionTB.Text = ""; edadTB.Text = ""; alturaTB.Text = ""; limpiar.Checked = false; } // Fin de actualizar vista sólo si se insertó el registro } else { MessageBox.Show(Form.ActiveForm, "La edad y la altura deben ser mayores a 0, tampoco dejes vacío algún campo."); } // Fin de realizar validación de datos } catch (FormatException) { MessageBox.Show(Form.ActiveForm, "Error de formato, escribe números en la edad y la altura."); } catch (OverflowException) { MessageBox.Show(Form.ActiveForm, "La altura o la edad tienen números muy grandes"); } // Fin de atrapar posibles errores } // Fin de insertar registro en el archivo
} // Fin de obtener una lista de objetos de cierto modelo // ============================================================================== // ESCRIBIR O SOBREESCRIBIR UN OBJETO EN ARCHIVOS BINARIOS // ------------------------------------------------------------------------------ // Regresa un booleano de confirmación para controlar qué pasa si no se inserta // ============================================================================== public static bool EscribirRegistro(string ruta, bool limpiar, Persona persona) { BinaryWriter bw = null; bool insercionExitosa = false; try { // Buscar errores de lectura y escritura if (File.Exists(ruta)) { bw = new BinaryWriter( new FileStream( ruta, /* Archivo a escribir */ ((limpiar)? FileMode.Create : FileMode.Append), FileAccess.Write ) /* Fin de creación de stream */ ); // Fin de creación de lector binario // Insertando el modelo de datos en el stream bw.Write(persona.Nombre); // String bw.Write(persona.Ocupacion); // String bw.Write(persona.Edad); // Int16 bw.Write(persona.EstaVivo); // Boolean bw.Write(persona.Altura); // Single insercionExitosa = true; } else { // No existe el archivo MessageBox.Show( "No existe el archivo para escribir!", "Error de directorio", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1 ); // Fin de mostrar error } // Fin de ver si existe o no el archivo } catch (IOException e) { MessageBox.Show(e.Message); } finally { if (bw != null) bw.Close(); } return insercionExitosa; } // Fin de capturar error de lectura y escritura