/*
  Archivo: ArchivosFunciones.c
  Descripcion: Este programa permite el manejo de archivos
  Autor: Basurto Páez Gustavo
  Fecha: 28 de mayo de 2008
*/

/*Incluir librerias*/
#include <stdio.h>
#include <stdlib.h>


/**Definicion de constantes*/
#define TAMCADENA 30  //Tamanio de ruta y nombre del archivo


//prototipos
FILE *AperuraArchivo (char ruta_nombre[], char modo[]);
void CierreArchivo(FILE *arch);
void LecturaArchivoCarac(FILE *archivo);
void EscrituraConsolaArchivoCarac(FILE *archivo);
void LecturaArchivoFromato(FILE *archivo);
void LecturaArchivoCadena(FILE *archivo);
void RegresarArchivo (FILE *arch);
int ObtenerPosArchivo(FILE *arch);
void  EscrituraArchivoCadena(FILE *archivo);
void  EscrituraArchivoCadenaFormato(FILE *archivo);

int main ()
{
     int pos =0;

     //Archivos
     FILE *archLectura;
     FILE *archEscritura;

    //Utilice doble diagonal para represntar una \ en C
    //char ruta_nombre[] = "C:\\PRUEBA.txt";
    //char ruta_nombre[] = "C:\\PREUBA2.txt";

    //Utilizar si el archivo se encuntra en donde se ejecuta el programa
    char ruta_nombre[] = "PREUBA2.txt";

    //1.- Archivo de lectura
    printf("\n\n Apertura del Archivo\n\n");
    archLectura = AperuraArchivo (ruta_nombre , "r+");

    //3.-Lectura
    //printf("\n\n Lectura del contenido del Archivo con fgetc().\n\n");
    //printf("\n\n Presione enter para ver siguiente caracter.\n\n");
    //LecturaArchivoCarac(archLectura);

    //4.-Escritura
    //printf("\n\n Escritura de un archivo con putc()\n\n");
    //EscrituraConsolaArchivoCarac(archLectura);

    //5.-Lectura
    //printf("\n\n Lectura del contenido de un archivo con fgets ()\n\n");
    //LecturaArchivoCadena(archLectura);



    //6.- Obtener posicion del archivo
    //pos = ObtenerPosArchivo(archLectura);
    //printf("\n\n Posicion del archivo es: %d \n\n", pos);

    //7.- rewind
    //RegresarArchivo (archLectura);
    //printf("\n\n Lectura del contenido de un archivo con fgets ()\n\n");
    //LecturaArchivoCadena(archLectura);

    //8.-Escribir con fputs
    //printf("\n\n Escritura de un archivo con fputs()\n\n");
    //EscrituraArchivoCadena(archLectura);
    //RegresarArchivo (archLectura);
    //printf("\n\n Lectura del contenido de un archivo con fgets ()\n\n");
    //LecturaArchivoCadena(archLectura);

    //9.-Escribir con formato printf
    //printf("\n\n Escritura de un archivo con fprintf()\n\n");
    //EscrituraArchivoCadenaFormato(archLectura);
    //RegresarArchivo (archLectura);
    //printf("\n\n Lectura del contenido de un archivo con fgets ()\n\n");
    //LecturaArchivoCadena(archLectura);


    //2.- Cierre
    printf("\n\n Cerrar Archivo \n\n");
    CierreArchivo(archLectura);

    getch();
    return (0);
}


/*
* Descripcion:
* Entrada:
* Salida:
*/
FILE *AperuraArchivo (char ruta_nombre[], char modo[])
{
     FILE *arch;
     arch = fopen(ruta_nombre, modo);
     if(arch == NULL )
     {
	printf("\n\nErrores al abrir el archivo %s ", ruta_nombre);
	getch();
	exit(-1);
     }
     return( arch );
}

/*
*/
void CierreArchivo(FILE *arch)
{
     fclose (arch);
}

/*
*/
void LecturaArchivoCarac(FILE *archivo)
{
     char carac;

     carac  = fgetc( archivo);
     printf("%c",carac);
	//Lectura continua
	while ( carac != EOF )
	{
	///Otras instrucciones
		carac  = fgetc( archivo);
		printf("%c",carac);
		//getch para ir pausando el programa
		 getch();
	}
     
}

/*
*/
void EscrituraConsolaArchivoCarac(FILE *archivo)
{
     char carac = '\0';
     
     printf("\n\nTeclee una cadena (finalice con enter): \n");

     //Lectura continua
	 while ( carac != '\n')
	 {
	//Lectura de caracteres
	carac = getchar();
		//A archivo
		fputc(carac, archivo);
	 }
}

/*
*/
void LecturaArchivoFormato(FILE *archivo)
{
     char cadena [TAMCADENA];
     
     //fscanf(archivo, "%s", &cadena);
     //printf("%s", cadena);

	//Lectura continua 
	while ( !feof(archivo) )
	{
         //Otras instrucciones
         fscanf(archivo, "%s", &cadena);
         printf("%s", cadena);
          getch();
	}

}

/*
*/
void LecturaArchivoCadena(FILE *archivo)
{
     char cadena[TAMCADENA];
     char *prueba; //puntero
     
     prueba = fgets(cadena, TAMCADENA, archivo);
   
	//Lectura continua 
	while ( prueba != NULL )
	{
     //printf("%s-*%s*",prueba, cadena );
     printf("%s",cadena );     
     prueba = fgets(cadena, TAMCADENA, archivo);     
	}
     
}


/*
* Descripcion:
* Entrada:
* Salida:
*/
void RegresarArchivo (FILE *arch)
{
     fpos_t comienzo=0;
     fsetpos(arch, &comienzo);     
}

/*
*/
int ObtenerPosArchivo(FILE *arch)
{
    int pos = 0 ;
    fpos_t posicion=0;
    
    fgetpos( arch, &posicion );
    pos = posicion;
    return (pos);
    //(int) 
    //fgetpos( archLectura, &posicion );
}   

void  EscrituraArchivoCadena(FILE *archivo)
{
  char cadena[] = "Hola Mundo con .\t. Archivos - fputs()\n";
  int cont =0;
  for(cont =0; cont <10; cont++)
  {          
      fputs( cadena, archivo);
  }         
}

void  EscrituraArchivoCadenaFormato(FILE *archivo)
{
  char cadena[] = "\"Hola Mundo con\" .\t. Archivos - fprintf()\n";
  int cont =0;
  for(cont =0; cont <10; cont++)
  {
      //printf("*%d - : %s \n", cont, cadena);
      fprintf(archivo, "%d - : %s", cont, cadena);
  }         
}
