public void EscribirPadre(int _idPadre, NodoProducto PadreNuevo)
            {
                var file   = new FileStream(GlobalPath, FileMode.Open);
                var reader = new StreamReader(file);
                var linea  = string.Empty;
                var index  = file.Position;

                for (int i = 0; i < _idPadre; i++)
                {
                    linea  = reader.ReadLine();
                    index += linea.Length + 1;
                }
                file.Position = index + 2;
                int indicearchivo = Convert.ToInt32(index);

                //sobre escribe el hijo
                SortDatos(PadreNuevo.Datos);
                file.Write(Encoding.ASCII.GetBytes(PadreNuevo.WriteNodo()), 0, (PadreNuevo.WriteNodo()).Length);
                file.Close();
            }
            public void Insertar(Producto Nuevo)
            {
                var FILE   = new FileStream(GlobalPath, FileMode.Open);
                var lector = new StreamReader(FILE);

                if (IdPAdre == 1 && !primeraSeparecion) // aun no se parte
                {
                    var linea = lector.ReadLine();
                    linea = lector.ReadLine();
                    FILE.Close();
                    Raiz = Raiz.ReadNodo(linea);
                    var contador = 0;
                    for (int i = 0; i <= Raiz.Datos.Length; i++)
                    {
                        if (i == Raiz.Datos.Length)
                        {
                            PrimeraSeparacion(Raiz, Nuevo);
                            break;
                        }
                        //insertando en la raiz
                        if (Raiz.Datos[i] == null)
                        {
                            Raiz.Datos[contador] = Nuevo;
                            SortDatos(Raiz.Datos);

                            var escritor = new StreamWriter(GlobalPath);
                            escritor.WriteLine($"{(IdPAdre).ToString().PadLeft(3, '0')}" +
                                               $"|{Grado.ToString().PadLeft(3, '0')}|{Siguiente.ToString().PadLeft(3, '0')}" +
                                               $"|{LargoPadre.ToString().PadLeft(3, '0')}|{LargoHijo.ToString().PadLeft(3, '0')}");
                            escritor.WriteLine(Raiz.WriteNodo());
                            escritor.Close();
                            break;
                        }
                        else
                        {
                            contador++;
                        }
                    }
                }
                else
                {
                    FILE.Close();
                    InsertarEnHoja(SeekPadre(IdPAdre), Nuevo);
                }
            }
            //idpadre|grado|siguiente|tamañopadre|tamañohijo

            public ArbolStar(int _grado, string _path)
            {
                var file   = new FileStream(_path, FileMode.OpenOrCreate);
                var lector = new StreamReader(file);
                var linea  = lector.ReadLine();

                GlobalPath = _path;
                if (linea == null)
                {//nuevo arbol
                    LargoPadre = new NodoProducto(_grado, false).WriteNodo().Length;
                    LargoHijo  = new NodoProducto(_grado, true).WriteNodo().Length;
                    IdPAdre    = 1;
                    Siguiente  = IdPAdre + 1;
                    Grado      = _grado;
                    Raiz       = new NodoProducto(Grado, false);
                    lector.Close();
                    var escritor = new StreamWriter(GlobalPath);
                    Raiz.id     = IdPAdre;
                    Raiz.Grado  = _grado;
                    Raiz.esHoja = false;
                    escritor.WriteLine($"{(IdPAdre).ToString().PadLeft(3, '0')}" +
                                       $"|{Grado.ToString().PadLeft(3, '0')}|{Siguiente.ToString().PadLeft(3, '0')}" +
                                       $"|{LargoPadre.ToString().PadLeft(3, '0')}|{LargoHijo.ToString().PadLeft(3, '0')}|");
                    escritor.WriteLine(Raiz.WriteNodo());
                    escritor.Close();
                }
                else
                {//arbol cargado
                    var aMetaData = linea.Split('|');
                    //0raiz
                    IdPAdre = int.Parse(aMetaData[0]);
                    //1grado
                    Grado = int.Parse(aMetaData[1]);
                    //2siguiente
                    Siguiente = int.Parse(aMetaData[2]);
                    //3largo padre
                    LargoPadre = int.Parse(aMetaData[3]);
                    //4largohijo
                    LargoHijo = int.Parse(aMetaData[4]);
                    Raiz      = new NodoProducto(_grado, false);
                }
                file.Close();
            }
            public void PrimeraSeparacion(NodoProducto Actual, Producto Nuevo)
            {
                var lista = new List <Producto>();

                foreach (var item in Actual.Datos)
                {
                    lista.Add(item);
                }
                lista.Add(Nuevo);

                // escribir en el archivo todos los nodos disponibles del padre e hijos
                var hijo1 = new NodoProducto(Grado, true)
                {
                    Grado = Grado
                };

                hijo1.id = IdPAdre;
                var indice = 0;

                for (int i = 0; i < lista.Count / 2; i++)
                {
                    hijo1.Datos[indice] = lista[i];
                    indice++;
                }


                indice = 0;
                var hijo2 = new NodoProducto(Grado, true);

                hijo2.id = Siguiente;
                Siguiente++;
                for (int i = (lista.Count / 2) + 1; i < lista.Count; i++)
                {
                    hijo2.Datos[indice] = lista[i];
                    indice++;
                }
                var raiznueva = new NodoProducto(Grado, false)
                {
                    id = Siguiente
                };

                lista.Sort((x, y) => x.Nombre.CompareTo(y.Nombre));
                raiznueva.Datos[0] = lista[(lista.Count / 2) + 1];
                IdPAdre            = Siguiente;
                raiznueva.Hijos[0] = hijo1.id;
                raiznueva.Hijos[1] = hijo2.id;
                hijo1.Padre        = raiznueva.id;
                hijo2.Padre        = raiznueva.id;
                Siguiente++;
                SortDatos(raiznueva.Datos);
                SortDatos(hijo1.Datos);
                SortDatos(hijo2.Datos);

                var escritor = new StreamWriter(GlobalPath);

                //metadata
                escritor.WriteLine($"{(IdPAdre).ToString().PadLeft(3, '0')}" +
                                   $"|{Grado.ToString().PadLeft(3, '0')}|{Siguiente.ToString().PadLeft(3, '0')}" +
                                   $"|{LargoPadre.ToString().PadLeft(3, '0')}|{LargoHijo.ToString().PadLeft(3, '0')}|");
                // nodos
                escritor.WriteLine(hijo1.WriteNodo());
                escritor.WriteLine(hijo2.WriteNodo());
                escritor.WriteLine(raiznueva.WriteNodo());
                escritor.Close();
            }