public void Inserta_Atributo(CAtributo AT, CEntidad EN) { if (EN.Ptr_atrib == -1) { EN.Ptr_atrib = dimeTamArch(Name); archivo.modifica_ent_sig(EN.Ptr_entidad, Name, EN); AT.Direccion = dimeTamArch(Name); AT.Sig_Atributo = -1; EN.Lista_Atrb.Add(AT); archivo.insertaAtributo(AT, Name); //Console.Write("CASO 1 \n"); } else { AT.Direccion = dimeTamArch(Name); AT.Sig_Atributo = -1; int tam = EN.Lista_Atrb.Count(); //Console.Write(tam + " \n"); EN.Lista_Atrb[tam - 1].Sig_Atributo = AT.Direccion; //Modificar el atributo anterio su direccion soguiente en el archivo para que haga el link Archivo.modifica_atri_sig(EN.Lista_Atrb[tam - 1].Direccion, Name, EN.Lista_Atrb[tam - 1]); Console.Write(EN.Lista_Atrb[tam - 1].Direccion + " \n"); EN.Lista_Atrb.Add(AT); archivo.insertaAtributo(AT, Name); //Console.Write("CASO 2 \n"); } }
public void Modifica_Atributo(CEntidad Ent, CAtributo ATRI, CAtributo ATRI_MOD) { foreach (CAtributo Atr in Ent.Lista_Atrb) { if (Atr.Nombre == ATRI_MOD.Nombre) { Atr.Nombre = ATRI.Nombre; Atr.Tipo = ATRI.Tipo; Atr.Tamaño = ATRI.Tamaño; Atr.Indice = ATRI.Indice; Archivo.modifica_atri_sig(Atr.Direccion, Name, Atr); break; } } }
public void Elimina_Atributo(CAtributo atri_remove, CEntidad Ent) { if (Ent.Ptr_atrib == atri_remove.Direccion) { Ent.Ptr_atrib = atri_remove.Sig_Atributo; archivo.modifica_ent_sig(Ent.Ptr_entidad, Name, Ent); Ent.Lista_Atrb.Remove(atri_remove); Console.Write("Exito caso 1"); } else { int position = Ent.Lista_Atrb.IndexOf(atri_remove); Ent.Lista_Atrb[position - 1].Sig_Atributo = atri_remove.Sig_Atributo; archivo.modifica_atri_sig(Ent.Lista_Atrb[position - 1].Direccion, Name, Ent.Lista_Atrb[position - 1]); Ent.Lista_Atrb.Remove(atri_remove); Console.Write("Exito caso 2"); } }
public void leeAtributos(long dir_apuntador, string nameArch, CEntidad entidadAux) { //Console.Write(dir_apuntador + " Esta es la direccion del apuntador\n"); if (dir_apuntador != -1) { try { FileStream file = new FileStream(nameArch, FileMode.Open, FileAccess.Read); //Console.Write(dir_apuntador + " Esta es la direccion ya de busqueda\n"); file.Seek(dir_apuntador, SeekOrigin.Current); using (BinaryReader leer = new BinaryReader(file)) { CAtributo ATRI = new CAtributo(); /* private string nombre; * private long direccion; * private char tipo; * private int tamaño; * private int indice; * private long dir_Indice; * private long sig_Atributo;*/ ATRI.Direccion = leer.ReadInt64(); ATRI.Nombre = leer.ReadString(); ATRI.Tipo = leer.ReadChar(); ATRI.Tamaño = leer.ReadInt32(); ATRI.Indice = leer.ReadInt32(); ATRI.Dir_Indice = leer.ReadInt64(); ATRI.Sig_Atributo = leer.ReadInt64(); entidadAux.Lista_Atrb.Add(ATRI); //Console.Write(ATRI.Direccion + "\n"); //Console.Write(ATRI.Nombre + "\n"); //Console.Write(ATRI.Sig_Atributo + "\n"); leeAtributos(ATRI.Sig_Atributo, nameArch, entidadAux); } file.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
public void modifica_atri_sig(long apuntador, string nameArch, CAtributo AT) { try { using (BinaryWriter escribe = new BinaryWriter(new FileStream(nameArch, FileMode.Open))) { escribe.Seek(Convert.ToInt32(apuntador), SeekOrigin.Current); escribe.Write(AT.Direccion); escribe.Write(AT.Nombre); escribe.Write(AT.Tipo); escribe.Write(AT.Tamaño); escribe.Write(AT.Indice); escribe.Write(AT.Dir_Indice); escribe.Write(AT.Sig_Atributo); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void insertaAtributo(CAtributo AT, string nameArch) { try { using (BinaryWriter escribe = new BinaryWriter(new FileStream(nameArch, FileMode.Open))) { escribe.Seek(0, SeekOrigin.End); escribe.Write(AT.Direccion); escribe.Write(AT.Nombre); escribe.Write(AT.Tipo); escribe.Write(AT.Tamaño); escribe.Write(AT.Indice); escribe.Write(AT.Dir_Indice); escribe.Write(AT.Sig_Atributo); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
public void leeIndices(CAtributo atr, string nameArch, CEntidad ENTIDAD) { try { FileStream file = new FileStream(nameArch, FileMode.Open, FileAccess.Read); //MessageBox.Show("Direccion del indice " + atr.Dir_Indice.ToString() + " " + nameArch); file.Seek(atr.Dir_Indice, SeekOrigin.Current); using (BinaryReader leer = new BinaryReader(file)) { //MessageBox.Show("indice " + atr.Indice.ToString() + " numero de indices " + ENTIDAD.Lista_Indices.Count.ToString()); if (atr.Indice == 2) { if (atr.Tipo == 'S') { for (int i = 0; i < 27; i++) { CIndexP ind = new CIndexP(); long dat = leer.ReadInt64(); ind.DirIndice = dat; char datoS = leer.ReadChar(); ind.Indice = datoS.ToString(); long dat1 = leer.ReadInt64(); ind.DirRegistros = dat1; ENTIDAD.Lista_Indices.Add(ind); } } if (atr.Tipo == 'I') { for (int i = 0; i < 10; i++) { CIndexP ind = new CIndexP(); long dat = leer.ReadInt64(); ind.DirIndice = dat; char datoS = leer.ReadChar(); ind.Indice = datoS.ToString(); dat = leer.ReadInt64(); ind.DirRegistros = dat; ENTIDAD.Lista_Indices.Add(ind); } } } if (atr.Indice == 3) { for (int i = 0; i < 50; i++) { CIndexP ind = new CIndexP(); long dat = leer.ReadInt64(); ind.DirIndice = dat; string datoS = ""; for (int j = 0; j < atr.Tamaño; j++) { datoS += leer.ReadChar(); } ind.Indice = datoS; long dat1 = leer.ReadInt64(); ind.DirRegistros = dat1; ENTIDAD.Lista_Indices.Add(ind); //MessageBox.Show("Direccion del bloque " + ind.Indice + " = " + ind.DirRegistros); } } } file.Close(); } catch (Exception ex) { //MessageBox.Show(ex.ToString()); } }