/**Escribede un objeto de la clase CIndice*/ public void EscribeIndicePrimario(CIndice indPri) { BinaryWriter bw; bw = getBw(); bw.BaseStream.Seek(indPri.getDirInd(), SeekOrigin.Begin); bw.Write(indPri.getTipoInd()); bw.Write(indPri.getTamIndPri()); bw.Write(indPri.getIndPrim()); bw.Write(indPri.getSigInd()); bw.Write(indPri.getCabBloques()); bw.Write(indPri.getDirInd()); }
/**Elimian un bloque del archivo implementado en la organización*/ public void eliminaBloque(ref CIndice ind, CBloque b) { CBloque bloAux, bloAnt; long ptrAux, ptrAnt; int tamB; bloAux = bloAnt = null; ptrAux = ptrAnt = -1; tamB = b.getTamBlo(); ptrAux = ind.getCabBloques(); while (ptrAux != -1)//Se ubica el registro en el archivo { bloAux = getArchivo().leerBloque(ptrAux, tamB); if (b.ComparateTo(bloAux) != 0) { ptrAnt = ptrAux; bloAnt = bloAux; bloAnt.setTamBlo(tamB); ptrAux = bloAux.getSigBlo(); } else break; } if (ptrAux == ind.getCabBloques())//Se actualiza la cabecera de datos de la entidad en caso de que sea el primero { ind.setCabBloques( bloAux.getSigBlo()); getArchivo().EscribeIndicePrimario(ind); } else { bloAnt.setSigBlo(bloAux.getSigBlo()); bloAnt.setTamBlo(tamB); getArchivo().EscribeBloque(bloAnt, ptrAnt); } }
private void btEliminarReg_Click(object sender, EventArgs e) { DataGridViewSelectedRowCollection reg = tablaDatos.SelectedRows; CBloque bloqueAux; long posInd; getArchivo().AbrirArchivo(); for (int i = 0; i < reg.Count; i++) { bloqueAux = creaBloqueDatos(reg[i].Index); BajaOSIRec(ent, bloqueAux); eliminaOSI(ent, bloqueAux); } getArchivo().CerrarArchivo(); if (reg.Count > 0) { getArchivo().AbrirArchivo(); indPrim = getArchivo().LeerIndicePrimario(indPrim.getDirInd()); getArchivo().CerrarArchivo(); if (indPrim.getCabBloques() == -1) { listaIP.Items.Clear(); ImprimeIndices(ent.getApCabDatos()); if (ent.getApCabDatos() != -1) listaIP.SelectedIndex = 0; } imprimeTablaDatos(indPrim.getCabBloques()); } }
/**Inserta el bloque de datos, accediendo a la estructura de datos implementada en el archivo*/ public int insBloque(CIndice ind, CBloque nuevo, long posB) { CBloque bAux, bAnt = null; long ptrAux, ptrAnt = -1; int band = -1; ptrAux = ind.getCabBloques(); while (ptrAux != -1) { bAux = getArchivo().leerBloque(ptrAux, nuevo.getTamBlo()); if ((band = nuevo.ComparateTo(bAux)) > 0) { ptrAnt = ptrAux; bAnt = bAux; bAnt.setTamBlo(nuevo.getTamBlo()); ptrAux = bAux.getSigBlo(); } else break; } if (band == 0) return 0; else if (ptrAux == ind.getCabBloques()) { ind.setCabBloques(posB); getArchivo().EscribeIndicePrimario(ind); } else { bAnt.setSigBlo(posB); getArchivo().EscribeBloque(bAnt, ptrAnt); } nuevo.setSigBlo(ptrAux); getArchivo().EscribeBloque(nuevo, posB); return (band); }