Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/03/2012, 08:28
diegogarciamaciel
 
Fecha de Ingreso: marzo-2012
Ubicación: Uruguay
Mensajes: 4
Antigüedad: 12 años, 8 meses
Puntos: 0
Exclamación Guardar arbol a un archivo

Bueno como comente en el otro tema, estoy teniendo un problemon con archivos, no logro hacer que me guarde en un archivo que es NOMBREARCHIVO.ART y el usuario se encarga de ingresar el nombredelarchivo.art en un string dinamico, bueno aca paso las estructuras.

Código PHP:
ELEMENTO:
typedef struct {
int solapa;
bool EsNumero;
union {
int numero;
char car;
DatosExtra;
Elemento;


EXPRESION:
typedef struct NodoA {
Elemento info;
NodoA hizq;
NodoA hder;
nodo;
typedef nodo Expresion

Yo tengo que guardar una expresion, el tema es que tengo que guardar elemento por elemento para que vaya ordenado en preorden, cosa que despues lo pueda levantar igual, para eso le cargo el int solapa al elemento y le voy cargando esos numeros a la expresion en preorden.

el tema es que no se si el sizeof me va a calcular el largo en bites de ese struct con union discriminada, esto es lo que tengo:


Código PHP:
string s2;
scan(s2);
 
FILE archivo;
                                         
archivo fopen (s2,"r");
                                         
Elemento elem1;
                                         if (
archivo == NULL){
                                             
archivo fopen (s2,"wb");
                                            
                                             [
B]save (archivo,aux);[/B//lo comento mas abajo
                                             
fclose(archivo);


                                         }
                                         else
                                         
printf("YA EXISTE UN ARCHIVO CON ESE NOMBRE, Desea sobreescribilo? S = Si, N = No \n");
                                         
fflush(stdin);
                                         
scanf("%c",&opcion);
                                         if ((
opcion == 'S') || (opcion == 's')){
                                             
archivo fopen (s2,"wb");
                                             
fwrite (&aux->info,10,1,archivo);
                                             
fclose(archivo);

                                         }
//end if
                                         
else
                                         if ((
opcion == 'N') || (opcion == 'n')){
                                         
printf("EL ARCHIVO NO SE HA GUARDADO. Escriba help para mas ayuda. \n");
                                         
fflush(stdin);
                                         }
//end if
                                         
else
                                         
printf("OPCION INCORRECTA. Escriba help para mas ayuda. \n");
                                         
fflush(stdin);



                                     } 
//end if
                                     
else
                                     
printf("PARAMETRO INCORRECTO, La posicion %d no ha sido cargada. Escriba help para mas ayuda. \n",valor1); 

Primero que nada no se si mi size esta bien para mi union discriminada Elemento, le puse 10.

en cuando al save que cito es asi

Código PHP:
void save (FILE *archivoExpresion exp){
    if(
exp != NULL){
        
fwrite (&exp->info,10,1,archivo);
        
save (archivo,exp->hizq);
        
save (archivo,exp->hder);
    }
//end if 
El tema es que no me esta guardando, no se si estoy haciendo algo mal, tampoco se si me esta funcionando el load que en este caso les iba a consultar como lo podia hacer.

Gracias por todo, espero que se entienda mi mensaje jejeje

saludos,