Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: UsuarioZ en 17 Marzo 2021, 04:00 am



Título: Archivos (c)
Publicado por: UsuarioZ en 17 Marzo 2021, 04:00 am
Hola, estaba probando abrir y cerrar un archivo, con fopen y fclose, pero no se muestran los printf al cerrar, ¿Qué estoy haciendo mal?

Gracias de antemano.

Código:
#include <stdio.h>
#include <string.h>
#include <errno.h>

void abrArch(FILE* f);
void cerrArch(FILE* f);

int main ()
{
    FILE* archivo;

    abrArch(archivo);
    cerrArch(archivo);

    return 0;
}

void abrArch(FILE* f)
{
    fopen("f.txt", "w");

    if(f != NULL)
        printf("El archivo se abrio correctamente!\n");
    else
        printf("Error al intentar abrir el archivo.\n");
}

void cerrArch(FILE* f)
{
    if(fclose(f) == 0)
        printf("El archivo se cerro exitosamente!\n");
    else
        printf("El archivo no pudo ser cerrado\n");
}


Salida:
Código:
El archivo se abrio correctamente!


PD: Disculpen por la categoría, recién la veo y no se como cambiarla.
Edit: Ya la cambiaron, gracias.


Título: Re: Archivos (c)
Publicado por: AlbertoBSD en 17 Marzo 2021, 05:34 am
No veo donde se inicializa el archivo (FILE *)
Hace falta igualar el apuntador, algo asi como:

Código
  1. f = fopen("f.txt", "w");


Si eso si soluciona tu problema, el problema era que estabas mandando a cerrar un FILE* sin inicializar y el programa se cerraba sin siquiera termianr de evaluar el if

Saludos!


Título: Re: Archivos (c)
Publicado por: Eternal Idol en 17 Marzo 2021, 08:53 am
AlbertoBSD esta en lo correcto; agrego un par de detalles, si queres que abrArch cambie el valor de, en este caso, la variable archivo tenes que usar doble puntero (o referencia en C++) y la comparacion que estas haciendo en cerrArch no funcionara por la misma razon (aunque le asignes el resultado del fopen a f en la funcion abrArch eso sera unicamente una variable de ambito local y archivo continuara teniendo el valor que tenia antes de llamar a abrArch).

Código
  1. int main ()
  2. {
  3.    FILE* archivo = 0;
  4.    abrArch(archivo);
  5. ...
  6.   /*archivo seguira siendo 0 en este punto*/
  7. void abrArch(FILE* f)
  8. {
  9.    f = fopen("f.txt", "w");
  10.  


Título: Re: Archivos (c)
Publicado por: UsuarioZ en 17 Marzo 2021, 09:43 am
Gracias, aplique las dos cosas y funciono.

Código:
El archivo se abrio correctamente!
El archivo se cerro exitosamente!