//Metodo que actualiza de forma logica la lista de claves y directorio hash public void actualizaListaHash(int dirCajon, int numCajon) { archivHash.Close(); archivHash = File.Open(archivHash.Name, FileMode.Open); BinaryReader br = new BinaryReader(archivHash); archivHash.Seek(dirCajon, SeekOrigin.Begin); r = 0; int clvComp = br.ReadInt32(); long dirReg = br.ReadInt64(); r = 0; while (clvComp != -1) { campoCajonHash camHas = new campoCajonHash(); camHas.clave = clvComp; camHas.apunReg = dirReg; r = 0; DirectorioHash[numCajon].listaCampoCajonHash.Add(camHas); clvComp = br.ReadInt32(); dirReg = br.ReadInt64(); r = 0; } r = 0; archivHash.Close(); }
//Este metodo realiza la insersion de una clave y su direccion en su correspondiente cajon de manera logica public void insertaEnCajon(int cajon, int clave, long dirReg) { r = 0; for (int i = 0; i < DirectorioHash.Length; i++) { if (i == cajon) { r = 0; campoCajonHash camHas = new campoCajonHash(); camHas.apunReg = dirReg; camHas.clave = clave; DirectorioHash[i].listaCampoCajonHash.Add(camHas); List <campoCajonHash> lisOrd = DirectorioHash[i].listaCampoCajonHash; lisOrd = lisOrd.OrderBy(o => o.clave).ToList(); DirectorioHash[i].listaCampoCajonHash = lisOrd; long valoCajon; r = 0; if (DirectorioHash[i].dirCajon == 0) { r = 0; archivHash.Close(); archivHash = File.Open(archivHash.Name, FileMode.Open); valoCajon = archivHash.Length; DirectorioHash[i].dirCajon = (int)archivHash.Length; archivHash.Close(); r = 0; actualizaDirectorioArchivo(i, valoCajon); } else { valoCajon = DirectorioHash[i].dirCajon; } r = 0; actualizaListaHashCajonArchivo(i, valoCajon); } } r = 0; }