Ayuda en manejo de Archivos en Lenguaje C

Iniciado por theluigy13etv, 8 Diciembre 2011, 01:58 AM

0 Miembros y 1 Visitante están viendo este tema.

theluigy13etv

Tengo unas cuántas dudas en cuanto a la apertura y cerradura de archivos. Bueno Comienzo. Primero planteo el siguiente código:


# include <stdio.h>
# include <iostream.h>

int main()
{
  FILE * arch;

  arch = fopen("Luis.txt","r");     // intentando abrir

  if(arch == NULL)
  {
     cout<<"El archivo no existe";
  }
  else
  {
     cout<<"El archivo si existe";
  }
  getchar();
  return 0;
}



Bueno, en este primero código estoy tratando de abrir un archivo. Para eso hago uso de la función fopen(...). Cuando no existe el archivo devolverá NULL y me mostrará el mensaje correspondiente. Pero que sucede si el archivo existiera. Qué valor devuelve la función fopen ¿?. Ya sé que me mostrará el mensaje "El archivo si existe" pero mi primera duda sería que si no devuelve NULL entonces ¿qué devuelve?

Sigo entonces. Con este siguiente código. Hago uso de la función fopen para abrir el archivo en el modo lectura. Si no existe entonces me pregunta si deseo crearlo, para eso hago uso de fopen en el modo "w". La teoría dice que si el archivo no existe, entonces la función lo crea. Muy bien hasta aquí. Pero, la función ¿Solo lo crea pero no lo abre o a parte de crearlo también lo abre?. Porque si solo lo crea pero no lo abre, entonces no tendría que usar fclose. Pero en caso contrario, sería necesario que lo cierre con fclose.


# include <stdio.h>
# include <iostream.h>

int main()
{
  FILE * arch;
  char resp;

  arch = fopen("Luis.txt","r");     // intentando abrir

  if(arch == NULL)
  {
     cout<<"El archivo no existe\n\n\n";
     do{

        cout<<"Desea crear el archivo???";
        cin>>resp;
     }while(!(resp=='S' || resp=='N'));

     if(resp=='S')
     {
        arch = fopen("Luis.txt","w");
        fclose(arch);
     }
  }
  else
  {
     cout<<"El archivo si existe";
  }

  getchar();
  return 0;
}



Muchas gracias.

naderST

#1
Bueno primero que nada cuando abras un archivo ciérralo haciendo uso de fclose().

1. Cuando fopen no retorna NULL retorna un puntero a una estructura FILE que no es mas que un nombre que se le da a la estructura _IO_FILE no estoy seguro de como funciona pero ya tienes una idea de que buscar.

2. Lo que hace fopen es abrir un archivo como su nombre lo dice, pero cunado lo haces en modo w si el archivo no existe no te devolverá NULL sino que lo va a crear y te devolverá un puntero a FILE.

theluigy13etv

Ayaaaaaaaa  ::) , osea que si el archivo no existe, al abrirlo con fopen en el modo W, lo crea y me devuelve el puntero a FILE, osea que se podría decir que el ¿archivo está creado y a la vez abierto?...osea que antes de finalizar el programa, aunque no escriba nada en el, ¿tengo que cerrarlo? con fclose.

rir3760

Si, con sus detalles.

Cuando un programa termina sin que se genere un error (una terminación normal) los buferes se vacían y se cierran los streams (entre otras cosas). Pero, de nuevo, se consideran "buenas practicas" cerrar los archivos antes de finalizar la aplicación.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language