Advertisement
Brandford

Manejo de Archivos en C

Jul 27th, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5. #include <time.h>
  6.  
  7. //Definicion de Estructuras
  8. struct estructura_amigo {
  9.     int numero_registro;
  10.     char nombre_completo[50];
  11.     char direccion[50];
  12.     int validar_visualizacion;
  13.     struct tm *obtener_fecha;
  14.     char fecha_ingreso[11];
  15. };
  16. struct estructura_amigo amigo;
  17.  
  18. //Definicion de Funciones
  19. int ingresar_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
  20. int listar_todos(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
  21. int busqueda_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
  22. int eliminar_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
  23. int listar_eliminados(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo);
  24. int copia_seguridad(FILE **p_arch1, FILE **p_arch2, char *p_ruta_arch1, char *p_ruta_arch2);
  25. int restaurar_copia_seguridad(FILE **p_arch2, char *p_ruta_arch1, char *p_ruta_arch2, struct estructura_amigo *p_amigo);
  26.  
  27.  
  28. void manejo_archivos_avanzado(void)
  29. {
  30.     FILE *p_arch1, *p_arch2;
  31.     char ruta_arch1[70]= { "/home/brandford/.learnc/ingreso-struct.dat" };
  32.     char ruta_arch2[70]= { "/home/brandford/.learnc/respaldo-ingreso-struct.dat" };
  33.     char selector[2];
  34.  
  35.     system("clear");
  36.     printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  37.     printf("\nlearnc - Aprendizaje de C con IDE Anjuta\n");
  38.     printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
  39.     printf("\n\nModulo: Manejo de Archivos Avanzado");
  40.     printf( "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n" );
  41.     printf("-\n");
  42.     printf("1. Nuevo Amigo\n");
  43.     printf("2. Listar Todos\n");
  44.     printf("3. Buscar Amigo\n");
  45.     printf("4. Eliminar Amigo\n");
  46.     printf("5. Listar Eliminados\n");
  47.     printf("6. Copia de Seguridad\n");
  48.     printf("7. Restaurar Copia de Seguridad\n\n");
  49.  
  50.     do{
  51.         fflush(stdin);
  52.         printf("Seleccione opcion\t\t: ");
  53.         fflush(stdout);
  54.         gets(selector);
  55.         if(  ! ( ( atoi(selector) > 0 ) && ( atoi(selector) < 8 ) ) )
  56.             printf("#Error en la opcion seleccionada\n");
  57.     }while( ! ( ( atoi(selector) > 0 ) && ( atoi(selector) < 8 ) ) );
  58.  
  59.     if(atoi(selector) == 1)
  60.         ingresar_amigo(&p_arch1, ruta_arch1, &amigo);
  61.     else if(atoi(selector) == 2)
  62.         listar_todos(&p_arch1, ruta_arch1, &amigo);
  63.     else if(atoi(selector) == 3)
  64.         busqueda_amigo(&p_arch1, ruta_arch1, &amigo);
  65.     else if(atoi(selector) == 4)
  66.         eliminar_amigo(&p_arch1, ruta_arch1, &amigo);
  67.     else if(atoi(selector) == 5)
  68.         listar_eliminados(&p_arch1, ruta_arch1, &amigo);
  69.     else if(atoi(selector) == 6)
  70.         copia_seguridad(&p_arch1, &p_arch2, ruta_arch1, ruta_arch2);
  71.     else if(atoi(selector) == 7)
  72.         restaurar_copia_seguridad(&p_arch2, ruta_arch1, ruta_arch2, &amigo);
  73.    
  74.     printf("-\n\n\n");
  75.     printf("Presione <ENTER> para continuar . . .");
  76.     fflush(stdin);
  77.     getchar();
  78.     system("clear");
  79. }
  80.  
  81.  
  82. //Ingreso a archivo informacion
  83. int ingresar_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
  84. {
  85.     time_t fecha;
  86.     int count= 0;
  87.  
  88.     fecha= time(NULL);
  89.     p_amigo -> obtener_fecha= localtime(&fecha);
  90.     strftime(p_amigo -> fecha_ingreso, 11, "%d-%m-%Y", p_amigo -> obtener_fecha);
  91.    
  92.     printf("\nIngreso:\n");
  93.     *p_arch1= fopen(p_ruta_arch1, "a+b");
  94.     if(*p_arch1 == NULL)
  95.     {
  96.         printf("Error al abrir el archivo\n");
  97.         exit(1);
  98.     }
  99.  
  100.     while(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
  101.     {
  102.         count++;
  103.     }
  104.    
  105.     p_amigo -> numero_registro= count +1;  
  106.    
  107.     do{
  108.         fflush(stdin);
  109.         printf("Ingrese Nombre Completo\t\t: ");
  110.         fflush(stdout);
  111.         gets(p_amigo -> nombre_completo);
  112.         if( ! ( ( p_amigo -> nombre_completo[0] != 0 ) && ( p_amigo -> nombre_completo[0] != ' ' ) ) )
  113.         {
  114.             printf("#Debe ingresar un valor\n");
  115.         }
  116.     }while( ! ( ( p_amigo -> nombre_completo[0] != 0 ) && ( p_amigo -> nombre_completo[0] != ' ' ) ) );
  117.  
  118.     do{
  119.         fflush(stdin);
  120.         printf("Ingrese Direccion\t\t: ");
  121.         fflush(stdout);
  122.         gets(amigo.direccion);
  123.         if( ! ( ( p_amigo -> direccion[0] != 0 ) && ( p_amigo -> direccion[0] != ' ' ) ) )
  124.         {
  125.             printf("#Debe ingresar un valor\n");
  126.         }
  127.     }while( ! ( ( p_amigo -> direccion[0] != 0 ) && ( p_amigo -> direccion[0] != ' ' ) ) );
  128.  
  129.     p_amigo -> validar_visualizacion= 1;
  130.  
  131.     fseek(*p_arch1, 0, SEEK_END);
  132.     fwrite(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1);
  133.  
  134.     if(fclose(*p_arch1) != 0)
  135.     {
  136.         printf("Error al cerrar el archivo\n");
  137.         exit(1);
  138.     }
  139.  
  140.     return(0);
  141. }
  142.  
  143.  
  144. //Listar informacion desde el archivo
  145. int listar_todos(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
  146. {
  147.     printf("\nListado:\n");
  148.     *p_arch1= fopen(p_ruta_arch1, "r+b");
  149.     if(*p_arch1 == NULL)
  150.     {
  151.         printf("Error al abrir el archivo\n");
  152.         exit(1);
  153.     }
  154.    
  155.     while(feof(*p_arch1) == 0)
  156.     {
  157.         if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
  158.         {
  159.             if(p_amigo -> validar_visualizacion == 1)
  160.             {
  161.                 printf("Registro: %d. %s\n", p_amigo -> numero_registro, p_amigo -> nombre_completo);  
  162.             }
  163.         }
  164.     }
  165.     if(fclose(*p_arch1) != 0)
  166.     {
  167.         printf("Error al cerrar el archivo\n");
  168.         exit(1);
  169.     }
  170.  
  171.     return(0);
  172. }
  173.  
  174. //Buscar amigo en archivo
  175. int busqueda_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
  176. {
  177.     char selector_registro[2];
  178.     char registros_validados[10];
  179.     int count;
  180.     int validar_registro_busqueda;
  181.  
  182.     printf("\nBusqueda:\n");
  183.     *p_arch1= fopen(p_ruta_arch1, "r+b");
  184.     if(p_arch1 == NULL)
  185.     {
  186.         printf("Error al abrir el archivo\n");
  187.         exit(1);
  188.     }
  189.  
  190.     count= 0;
  191.    
  192.     rewind(*p_arch1);
  193.     while(feof(*p_arch1) == 0)
  194.     {
  195.         if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
  196.         {
  197.             if(p_amigo -> validar_visualizacion == 1)
  198.             {
  199.                 printf("Registro: [%d]. %s\n", p_amigo -> numero_registro, p_amigo -> nombre_completo);
  200.                 registros_validados[count]= p_amigo -> numero_registro;
  201.                 count++;
  202.             }
  203.         }
  204.     }
  205.    
  206.     do{
  207.         fflush(stdin);
  208.         printf("\nSeleccione registro\t\t: ");
  209.         fflush(stdout);
  210.         gets(selector_registro);
  211.  
  212.         for(count= 0 ; count < strlen(registros_validados) ; count++)
  213.         {
  214.             if( atoi(selector_registro) == registros_validados[count] )
  215.             {
  216.                 validar_registro_busqueda= 1;
  217.             }
  218.         }
  219.        
  220.         if( ! ( ( selector_registro[0] != 0 ) && ( selector_registro[0] != ' ' ) && ( validar_registro_busqueda == 1 ) ) )
  221.         {
  222.             printf("#Debe ingresar un valor");
  223.         }
  224.     }while( ! ( ( selector_registro[0] != 0 ) && ( selector_registro[0] != ' ' ) && ( validar_registro_busqueda == 1 ) ) );
  225.  
  226.     fseek(*p_arch1, (atoi(selector_registro) - 1)*sizeof(struct estructura_amigo), SEEK_SET);
  227.     fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1);
  228.     printf("\nNumero de Registro\t\t: %d\n", p_amigo -> numero_registro);
  229.     printf("Nombre Completo\t\t\t: %s\n", p_amigo -> nombre_completo);
  230.     printf("Direccion\t\t\t: %s\n", p_amigo -> direccion);
  231.     printf("Validar Visualizacion\t\t: %d\n", p_amigo -> validar_visualizacion);
  232.     printf("Fecha de Ingreso\t\t: %s\n", p_amigo -> fecha_ingreso);
  233.    
  234.     if(fclose(*p_arch1) != 0)
  235.     {
  236.         printf("Error al cerrar el archivo\n");
  237.         exit(1);
  238.     }
  239.  
  240.     return(0);
  241. }
  242.  
  243. //Eliminar amigo en archivo
  244. int eliminar_amigo(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
  245. {
  246.     int count;
  247.     char selector_registro[2];
  248.     char registros_validados[10];
  249.     int validar_registro_busqueda;
  250.    
  251.     printf("\nBusqueda:\n");
  252.     *p_arch1= fopen(p_ruta_arch1, "r+b");
  253.     if(p_arch1 == NULL)
  254.     {
  255.         printf("Error al abrir el archivo\n");
  256.         exit(1);
  257.     }
  258.  
  259.     count= 1;
  260.     rewind(*p_arch1);
  261.     while(feof(*p_arch1) == 0)
  262.     {
  263.         if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
  264.         {
  265.             if(p_amigo -> validar_visualizacion == 1)
  266.             {
  267.                 printf("Registro: [%d]. %s\n", p_amigo -> numero_registro, p_amigo -> nombre_completo);
  268.                 registros_validados[count]= p_amigo -> numero_registro;
  269.                 count++;
  270.             }
  271.         }
  272.     }
  273.  
  274.     do{
  275.         fflush(stdin);
  276.         printf("\nSeleccione registro\t\t: ");
  277.         fflush(stdout);
  278.         gets(selector_registro);
  279.  
  280.         for(count= 0 ; count < strlen(registros_validados) ; count++)
  281.         {
  282.             if( atoi(selector_registro) == registros_validados[count] )
  283.             {
  284.                 validar_registro_busqueda= 1;
  285.             }
  286.         }
  287.        
  288.         if( ! ( ( selector_registro[0] != 0 ) && ( selector_registro[0] != ' ' ) && ( validar_registro_busqueda == 1 ) ) )
  289.         {
  290.             printf("#Debe ingresar un valor");
  291.         }
  292.     }while( ! ( ( selector_registro[0] != 0 ) && ( selector_registro[0] != ' ' ) && ( validar_registro_busqueda == 1 ) ) );
  293.  
  294.     fseek(*p_arch1, (atoi(selector_registro) - 1)*sizeof(amigo), SEEK_SET);
  295.     fread(&amigo, sizeof(amigo), 1, *p_arch1);
  296.  
  297.     p_amigo -> validar_visualizacion= 0;
  298.  
  299.     fseek(*p_arch1, (atoi(selector_registro) - 1)*sizeof(amigo), SEEK_SET);
  300.     fwrite(&amigo, sizeof(amigo), 1, *p_arch1);
  301.    
  302.     if(fclose(*p_arch1) != 0)
  303.     {
  304.         printf("Error al cerrar el archivo\n");
  305.         exit(1);
  306.     }
  307.  
  308.     *p_arch1= fopen(p_ruta_arch1, "r+b");
  309.     if(p_arch1 == NULL)
  310.     {
  311.         printf("Error al abrir el archivo\n");
  312.         exit(1);
  313.     }
  314.  
  315.     return(0);
  316. }
  317.  
  318. //Listar amigos marcado como eliminados
  319. int listar_eliminados(FILE **p_arch1, char *p_ruta_arch1, struct estructura_amigo *p_amigo)
  320. {
  321.     printf("\nEliminados:\n");
  322.     *p_arch1= fopen(p_ruta_arch1, "r+b");
  323.     if(*p_arch1 == NULL)
  324.     {
  325.         printf("Error al abrir el archivo\n");
  326.         exit(1);
  327.     }
  328.    
  329.     while(feof(*p_arch1) == 0)
  330.     {
  331.         if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
  332.         {
  333.             if(p_amigo -> validar_visualizacion == 0)
  334.             {
  335.                 printf("Registro: %d. %s\n", p_amigo -> numero_registro, p_amigo -> nombre_completo);  
  336.             }
  337.         }
  338.     }
  339.     if(fclose(*p_arch1) != 0)
  340.     {
  341.         printf("Error al cerrar el archivo\n");
  342.         exit(1);
  343.     }
  344.  
  345.     return(0);
  346. }
  347.  
  348. //Copia de Seguridad
  349. int copia_seguridad(FILE **p_arch1, FILE **p_arch2, char *p_ruta_arch1, char *p_ruta_arch2)
  350. {
  351.     printf("\nCopia de Seguridad:\n");
  352.     *p_arch1= fopen(p_ruta_arch1, "r+b");
  353.     if(*p_arch1 == NULL)
  354.     {
  355.         printf("Error al abrir el archivo\n");
  356.         exit(1);
  357.     }
  358.  
  359.    remove(p_ruta_arch2);
  360.  
  361.     *p_arch2= fopen(p_ruta_arch2, "w+b");
  362.     if(p_arch2 == NULL)
  363.     {
  364.         printf("Error al abrir el archivo\n");
  365.         exit(1);
  366.     }
  367.  
  368.     while(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch1))
  369.     {
  370.         fwrite(&amigo, sizeof(struct estructura_amigo), 1, *p_arch2);
  371.     }
  372.  
  373.     if(fclose(*p_arch1) != 0)
  374.     {
  375.         printf("Error al cerrar el archivo\n");
  376.         exit(1);
  377.     }
  378.  
  379.     if(fclose(*p_arch2) != 0)
  380.     {
  381.         printf("Error al cerrar el archivo\n");
  382.         exit(1);
  383.     }
  384.  
  385.     printf("La copia de seguridad se ha creado correctamente\n");
  386.  
  387.     return(0);
  388. }
  389.  
  390. //Restaurar Copia de Seguridad
  391. int restaurar_copia_seguridad(FILE **p_arch2, char *p_ruta_arch1, char *p_ruta_arch2, struct estructura_amigo *p_amigo)
  392. {
  393.     char selector[2];
  394.     int count;
  395.     int validar_letras;
  396.    
  397.     printf("\nListado Copia Seguridad:\n");
  398.     *p_arch2= fopen(p_ruta_arch2, "r+b");
  399.     if(*p_arch2 == NULL)
  400.     {
  401.         printf("Error al abrir el archivo\n");
  402.         exit(1);
  403.     }
  404.    
  405.     while(feof(*p_arch2) == 0)
  406.     {
  407.         if(fread(&amigo, sizeof(struct estructura_amigo), 1, *p_arch2))
  408.         {
  409.             printf("Registro: %d. Valido: %d. %s\n", p_amigo -> numero_registro, p_amigo -> validar_visualizacion, p_amigo -> nombre_completo);
  410.         }
  411.     }
  412.     if(fclose(*p_arch2) != 0)
  413.     {
  414.         printf("Error al cerrar el archivo\n");
  415.         exit(1);
  416.     }
  417.  
  418.     do{
  419.         fflush(stdin);
  420.         printf("\n¿Desea restaurar la Copia de Seguridad (s/n): ");
  421.         fflush(stdout);
  422.         gets(selector);
  423.         for( ( count= 0, validar_letras= 0 ) ; count < strlen( selector ) ; count ++ )
  424.         {
  425.             if( isdigit( selector[count] ) )
  426.             {
  427.                 validar_letras= 1;
  428.                 printf("#Debe solo debe ingresar letras\n");
  429.             }
  430.          }
  431.        
  432.         if(  ! ( ( ( tolower(selector[0]) == 's' ) || ( tolower(selector[0]) == 'n' ) ) && ( validar_letras != 1 ) ) )
  433.             printf("#Error en la opcion seleccionada");
  434.     }while( ! ( ( ( tolower(selector[0]) == 's' ) || ( tolower(selector[0]) == 'n' ) ) && ( validar_letras != 1 ) ) );
  435.  
  436.     if(selector[0] == 's')
  437.     {
  438.         remove(p_ruta_arch1);
  439.         rename(p_ruta_arch2, p_ruta_arch1);
  440.         printf("La copia de seguridad se ha cargado correctamente\n");
  441.     }
  442.  
  443.     return(0);
  444. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement