public void LeerCubeta(long dir, Cubeta C) { using (fs = new FileStream(path + nombre, FileMode.Open, FileAccess.Read)) { C.Direccion = dir; fs.Seek(dir, SeekOrigin.Begin); byte[] bytes = new byte[sizeof(int)]; fs.Read(bytes, 0, sizeof(int)); int NoRegistros = BitConverter.ToInt32(bytes, 0); bytes = new byte[sizeof(long)]; fs.Read(bytes, 0, sizeof(long)); C.DirSigCubeta = BitConverter.ToInt64(bytes, 0); for (int i = 0; i < NoRegistros; i++) { bytes = new byte[sizeof(int)]; fs.Read(bytes, 0, sizeof(int)); int clave = BitConverter.ToInt32(bytes, 0); bytes = new byte[sizeof(int)]; fs.Read(bytes, 0, sizeof(int)); int a = BitConverter.ToInt32(bytes, 0); bytes = new byte[sizeof(long)]; fs.Read(bytes, 0, sizeof(long)); long d = BitConverter.ToInt64(bytes, 0); bytes = new byte[10]; fs.Read(bytes, 0, 10); string s = Encoding.ASCII.GetString(bytes, 0, bytes.Length).TrimEnd('\0'); C.Insertar(new CRegistro(clave, a, d, s)); } } }
public void InsertaRegistro(CRegistro registro) { Cubeta C = new Cubeta(noRegistros); Archivo archivo = new Archivo(nombre, path); int posicion = tabla.Hash(registro.Clave); long dirC = tabla.Cajones[posicion]; if (dirC == -1) { dirC = tabla.PtrsCubetaVacia; if (dirC != -1) { archivo.LeerCubeta(dirC, C); tabla.PtrsCubetaVacia = C.DirSigCubeta; C.DirSigCubeta = -1; } C.Insertar(registro); C.Direccion = tabla.Cajones[posicion] = archivo.EscribirCubeta(C); archivo.EscribirTablaH(tabla); } else { long ant; dirC = tabla.Cajones[posicion]; do { C = new Cubeta(noRegistros); archivo.LeerCubeta(dirC, C); ant = dirC; dirC = C.DirSigCubeta; } while (C.NoRegistros >= noRegistros && dirC != -1); if (C.NoRegistros < noRegistros) { C.Insertar(registro); C.Direccion = ant; archivo.EscribirCubeta(C); } else { Cubeta cc = new Cubeta(noRegistros); if (tabla.PtrsCubetaVacia != -1) { archivo.LeerCubeta(tabla.PtrsCubetaVacia, cc); tabla.PtrsCubetaVacia = cc.DirSigCubeta; cc.DirSigCubeta = -1; } cc.Insertar(registro); C.Direccion = ant; C.DirSigCubeta = cc.Direccion = archivo.EscribirCubeta(cc); archivo.EscribirCubeta(C); } // archivo.LeerCubeta(dirC, C); // C.InsertaRegistro(registro); } }