elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 23:28  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Ayuda en manejo de Archivos en Lenguaje C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda en manejo de Archivos en Lenguaje C  (Leído 720 veces)
theluigy13etv

Desconectado Desconectado

Mensajes: 106


Primero se hace, después se mejora


Ver Perfil
Ayuda en manejo de Archivos en Lenguaje C
« en: 8 Diciembre 2011, 01:58 »

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

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.

Código:
# 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.


« Última modificación: 8 Diciembre 2011, 02:00 por theluigy13etv » En línea
naderST


Desconectado Desconectado

Mensajes: 467



Ver Perfil
Re: Ayuda en manejo de Archivos en Lenguaje C
« Respuesta #1 en: 8 Diciembre 2011, 02:55 »

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.


« Última modificación: 8 Diciembre 2011, 02:59 por naderST » En línea
theluigy13etv

Desconectado Desconectado

Mensajes: 106


Primero se hace, después se mejora


Ver Perfil
Re: Ayuda en manejo de Archivos en Lenguaje C
« Respuesta #2 en: 8 Diciembre 2011, 19:07 »

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.
En línea
rir3760


Desconectado Desconectado

Mensajes: 382


Ver Perfil
Re: Ayuda en manejo de Archivos en Lenguaje C
« Respuesta #3 en: 9 Diciembre 2011, 01:28 »

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
En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
<sys/types.h> manejo de archivos
Programación C/C++
redHat 2 3,701 Último mensaje 23 Marzo 2007, 09:03
por mobilero
Lenguaje C para manejo de puertos USB
Programación C/C++
joserra89 0 3,045 Último mensaje 19 Noviembre 2008, 15:35
por joserra89
AYUDA MANEJO DE ARCHIVOS EN C++
Programación C/C++
chicashi5 1 1,775 Último mensaje 15 Enero 2010, 14:49
por yiti007
AYUDA A IMPLEMENTAR MANEJO DE ARCHIVOS A ESTE PROGRAMA TERMINADO
Programación C/C++
chicashi5 2 733 Último mensaje 20 Enero 2010, 03:48
por dosnuker
Ayuda para el manejo de archivos[Solucuionado]
.NET
Sk9ITk5Z 3 476 Último mensaje 31 Enero 2012, 17:27
por Sk9ITk5Z
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines