예제 #1
0
        //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;
        }
예제 #2
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();
        }
예제 #3
0
        //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;
        }