//Metodo que establece todos lo metodos para la eliminacion, este metodo de forma general elimina todo lo que implica eliminar una clave public void elimina(int clave) { int cajon = obtenCajonModulo(clave); int indElim = DirectorioHash[cajon].listaCampoCajonHash.FindIndex(x => x.clave == clave); DirectorioHash[cajon].listaCampoCajonHash.RemoveAt(indElim); actualizaEliminaArchivoCajon(cajon); if (DirectorioHash[cajon].listaCampoCajonHash.Count == 0) { r = 0; using (BinaryWriter bw = new BinaryWriter(File.Open(archivHash.Name, FileMode.Open))) { bw.Seek(8 * cajon, SeekOrigin.Begin); Byte[] bloque = new Byte[8]; for (int i = 0; i < 8; i++) { bloque[i] = 0xFF; } bw.Write(bloque); } DirectorioHash[cajon] = new CajonHash(); } r = 0; }
//Este metodo inizialisa el directorio de cajones public void creaDirectorioHash() { BinaryWriter bw = new BinaryWriter(archivHash); Byte[] bloque = new Byte[valorModu * 8]; for (int i = 0; i < valorModu * 8; i++) { bloque[i] = 0xFF; } bw.Write(bloque); DirectorioHash = new CajonHash[valorModu]; for (int i = 0; i < valorModu; i++) { DirectorioHash[i] = new CajonHash(); } r = 0; archivHash.Close(); }
//Este metodo actualiza de forma logica que es en memoria el directorio actual public void actualizaDirectorioLogico() { r = 0; int contCajon = 0; DirectorioHash = new CajonHash[valorModu]; for (int i = 0; i < valorModu; i++) { DirectorioHash[i] = new CajonHash(); } while (contCajon < valorModu) { archivHash.Close(); archivHash = File.Open(archivHash.Name, FileMode.Open); BinaryReader br = new BinaryReader(archivHash); archivHash.Seek(contCajon * 8, SeekOrigin.Begin); long valorDirCajon = br.ReadInt64(); if (contCajon == 3) { r = 0; } if (valorDirCajon != -1) { r = 0; DirectorioHash[contCajon] = new CajonHash(); DirectorioHash[contCajon].dirCajon = (int)valorDirCajon; actualizaListaHash((int)valorDirCajon, contCajon); r = 0; } contCajon++; } archivHash.Close(); r = 0; }