Пример #1
0
        private void LeerAtributosTabla()
        {
            long direccion_atributo, dir_indice, dir_siguienteAtributo;
            int  tipo_clave, longitud_atributo;

            char[] nombre_Atributos_Char, nombre_Archivo_LlaveF;

            char tipo;

            using (BinaryReader r = new BinaryReader(File.Open(ArchivoTabla.FullName, FileMode.Open)))//para leer
            {
                Lista_Atributos_Actual.Clear();
                int tamanioArchivo = (int)r.BaseStream.Length;
                if (tamanioArchivo > 8)
                {
                    long dirSig = 0;
                    r.BaseStream.Seek(0, SeekOrigin.Begin);
                    while (dirSig != -1)//mientras la direcci[on de siguiente atributo no sea null                                    { }
                    {
                        //dir_indice = r.ReadInt64();//8
                        Atributo auxAtributo = new Atributo();
                        nombre_Atributos_Char = r.ReadChars(35); //35
                        nombre_Archivo_LlaveF = r.ReadChars(35); //35
                        tipo = r.ReadChar();                     //1 tipo de atributo entero o char
                        longitud_atributo     = r.ReadInt32();   //4
                        tipo_clave            = r.ReadInt32();   //4
                        direccion_atributo    = r.ReadInt64();   //8
                        dir_siguienteAtributo = r.ReadInt64();   //8
                        dirSig = dir_siguienteAtributo;
                        for (int i = 0; i < nombre_Atributos_Char.Count(); i++)
                        {
                            if (nombre_Atributos_Char[i] != Convert.ToChar("\0"))
                            {
                                auxAtributo.nombeAtributo_String += nombre_Atributos_Char[i];
                            }
                        }
                        for (int i = 0; i < nombre_Archivo_LlaveF.Count(); i++)
                        {
                            if (nombre_Archivo_LlaveF[i] != Convert.ToChar("\0"))
                            {
                                auxAtributo.nombre_ArchivoLlaveForaneaString += nombre_Archivo_LlaveF[i];
                            }
                        }
                        auxAtributo.tipoDeDato        = tipo;
                        auxAtributo.longitudDato      = longitud_atributo;
                        auxAtributo.DireccionAtributo = direccion_atributo;
                        auxAtributo.tipocve           = tipo_clave;

                        auxAtributo.DireccionSigAtributo = dir_siguienteAtributo;

                        if (auxAtributo.tipoDeDato == 'E')
                        {
                            TablaDeRegistros.Columns.Add(auxAtributo.nombeAtributo_String, System.Type.GetType("System.Int32"));
                        }
                        else if (auxAtributo.tipoDeDato == 'F')
                        {
                            TablaDeRegistros.Columns.Add(auxAtributo.nombeAtributo_String);
                        }
                        else
                        {
                            TablaDeRegistros.Columns.Add(auxAtributo.nombeAtributo_String, System.Type.GetType("System.String"));
                        }


                        Lista_Atributos_Actual.Add(auxAtributo);
                    }
                    r.Close();
                    llenaTabla();
                }
                else
                {
                    if (tamanioArchivo == 0)
                    {
                        r.Close();
                        MessageBox.Show("Tabla vacia");
                        inicializaTabla();
                    }
                    else
                    {
                        MessageBox.Show("Tabla vacia");
                    }
                }
            }
        }