Archivos

Iniciado por Beginner Web, 21 Noviembre 2018, 18:40 PM

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

Beginner Web

Hola queria saber si es viable esta forma de cerrar dos veces el archivo, esto funciona 100% pero a mi no me gusta como queda, saludos
Código (cpp) [Seleccionar]
const int MAX=32;
typedef char tcad[MAX];
typedef FILE *archivo;
typedef struct usuario{
tcad nombre;
tcad apellido;
int edad;
...
};

void registrar_usuario_nuevo(archivo usuarios_de_facebook)
{
usuario nuevo;
usuarios_de_facebook=fopen("usuarios","ab+");
fflush(stdin);
cout<<"Ingrese nombre de usuario: ";
gets(nuevo.nombre);
fflush(stdin);
...
fclose(usuarios_de_facebook);
if(consultar_usuario(usuarios_de_facebook,nuevo.nombre)==false){
usuarios_de_facebook=fopen("usuarios.txt","ab");
fwrite(&nuevo,sizeof(nuevo),1,usuarios_de_facebook);
}
else
cout<<"Ya existe un usuario con ese nombre"<<endl;
fclose(usuarios_de_facebook);
}
7w7

CalgaryCorpus

Si cierras el archivo justo antes de llamar a la funcion consultar_usuario, que al parecer usa su contenido, no deberia poder acceder a la informacion contenida en el.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

srWhiteSkull

#2
En teoría deberías meter ese fclose() al final en la condición final y no fuera. Incluso si prescindes del cierre al final funcionaría, y dependiendo de si el fichero está cerrado o no la función obra y retorna un valor que si quieres podrías comprobarlo con fines depurativos  ;D

https://en.cppreference.com/w/cpp/io/c/fclose

Beginner Web

Bueno si, perdonen, aca dejo la funcion que vereifica si el nuevo usuario ya existe
Código (cpp) [Seleccionar]
bool consultar_usuario(archivo usuarios_de_facebook,tcad usuario_buscado)
{
usuario extraido;
bool encontrado=false;
usuarios_de_facebook=fopen("usuarios.txt","rb");
if(usuarios_de_facebook!=NULL){
while(!feof(usuarios_de_facebook) && !encontrado){
fread(&usuarios_de_facebook,sizeof(extraido),1,usuarios_de_facebook);
if(!feof(usuarios_de_facebook) && strcmp(extraido.nombre,usuario_buscado)==0)
encontrado=true;
}
}
fclose(usuarios_de_facebook);
return encontrado;
}
7w7

CalgaryCorpus

Estás cerrando el archivo 3 veces, parece.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

Beginner Web

2 para ser mas exactos pero se puede hacer eso o no? Porque la verdad me funciona igual  ;-)
7w7

CalgaryCorpus

3 fclose: registrar_usuario_nuevo tiene 2 fclose e invoca a consultar_usuario que tiene otro fclose.

No cierres el archivo si lo vas a usar otra vez.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

Beginner Web

Haa no si 3, bueno hoy resolvere eso  >:D
7w7

Beginner Web

Problema resolvido  :laugh:
Y lo resolvi sola, pense que alguien de aca me ayudaria pero se ve que no  >:D
Código (cpp) [Seleccionar]

void registrar_usuario_nuevo(archivo usuarios_de_facebook)
{
usuario nuevo;
usuarios_de_facebook=fopen("usuarios","ab+");
fflush(stdin);
cout<<"Ingrese nombre de usuario: ";
gets(nuevo.nombre);
fflush(stdin);
...
fclose(usuarios_de_facebook);
if(consultar_usuario(usuarios_de_facebook,nuevo.nombre)==false){
usuarios_de_facebook=fopen("usuarios.txt","ab");
fwrite(&nuevo,sizeof(nuevo),1,usuarios_de_facebook);
               fclose(usuarios_de_facebook);
}
else
cout<<"Ya existe un usuario con ese nombre"<<endl;
}
7w7

Beginner Web

Cita de: CalgaryCorpus en 22 Noviembre 2018, 05:27 AM
3 fclose: registrar_usuario_nuevo tiene 2 fclose e invoca a consultar_usuario que tiene otro fclose.

No cierres el archivo si lo vas a usar otra vez.
Es que hay que cerrarlo si vas a llamar a otro metodo que te hace una busqueda secuencial en el mismo bebe, saludos :laugh:
7w7