elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Archivos  (Leído 3,659 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Archivos
« en: 21 Noviembre 2018, 18:40 pm »

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
  1. const int MAX=32;
  2. typedef char tcad[MAX];
  3. typedef FILE *archivo;
  4. typedef struct usuario{
  5. tcad nombre;
  6. tcad apellido;
  7. int edad;
  8. ...
  9. };
  10.  
  11. void registrar_usuario_nuevo(archivo usuarios_de_facebook)
  12. {
  13. usuario nuevo;
  14. usuarios_de_facebook=fopen("usuarios","ab+");
  15. fflush(stdin);
  16. cout<<"Ingrese nombre de usuario: ";
  17. gets(nuevo.nombre);
  18. fflush(stdin);
  19. ...
  20. fclose(usuarios_de_facebook);
  21. if(consultar_usuario(usuarios_de_facebook,nuevo.nombre)==false){
  22. usuarios_de_facebook=fopen("usuarios.txt","ab");
  23. fwrite(&nuevo,sizeof(nuevo),1,usuarios_de_facebook);
  24. }
  25. else
  26. cout<<"Ya existe un usuario con ese nombre"<<endl;
  27. fclose(usuarios_de_facebook);
  28. }


« Última modificación: 21 Noviembre 2018, 19:30 pm por Beginner Web » En línea

7w7
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Archivos
« Respuesta #1 en: 21 Noviembre 2018, 18:52 pm »

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.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: Archivos
« Respuesta #2 en: 21 Noviembre 2018, 18:53 pm »

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
« Última modificación: 21 Noviembre 2018, 18:55 pm por srWhiteSkull » En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Archivos
« Respuesta #3 en: 21 Noviembre 2018, 23:40 pm »

Bueno si, perdonen, aca dejo la funcion que vereifica si el nuevo usuario ya existe
Código
  1. bool consultar_usuario(archivo usuarios_de_facebook,tcad usuario_buscado)
  2. {
  3. usuario extraido;
  4. bool encontrado=false;
  5. usuarios_de_facebook=fopen("usuarios.txt","rb");
  6. if(usuarios_de_facebook!=NULL){
  7. while(!feof(usuarios_de_facebook) && !encontrado){
  8. fread(&usuarios_de_facebook,sizeof(extraido),1,usuarios_de_facebook);
  9. if(!feof(usuarios_de_facebook) && strcmp(extraido.nombre,usuario_buscado)==0)
  10. encontrado=true;
  11. }
  12. }
  13. fclose(usuarios_de_facebook);
  14. return encontrado;
  15. }
En línea

7w7
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Archivos
« Respuesta #4 en: 22 Noviembre 2018, 02:29 am »

Estás cerrando el archivo 3 veces, parece.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Archivos
« Respuesta #5 en: 22 Noviembre 2018, 04:49 am »

2 para ser mas exactos pero se puede hacer eso o no? Porque la verdad me funciona igual  ;-)
En línea

7w7
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Archivos
« Respuesta #6 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.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Archivos
« Respuesta #7 en: 22 Noviembre 2018, 15:18 pm »

Haa no si 3, bueno hoy resolvere eso  >:D
En línea

7w7
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Archivos
« Respuesta #8 en: 22 Noviembre 2018, 21:34 pm »

Problema resolvido  :laugh:
Y lo resolvi sola, pense que alguien de aca me ayudaria pero se ve que no  >:D
Código
  1. void registrar_usuario_nuevo(archivo usuarios_de_facebook)
  2. {
  3. usuario nuevo;
  4. usuarios_de_facebook=fopen("usuarios","ab+");
  5. fflush(stdin);
  6. cout<<"Ingrese nombre de usuario: ";
  7. gets(nuevo.nombre);
  8. fflush(stdin);
  9. ...
  10. fclose(usuarios_de_facebook);
  11. if(consultar_usuario(usuarios_de_facebook,nuevo.nombre)==false){
  12. usuarios_de_facebook=fopen("usuarios.txt","ab");
  13. fwrite(&nuevo,sizeof(nuevo),1,usuarios_de_facebook);
  14.                fclose(usuarios_de_facebook);
  15. }
  16. else
  17. cout<<"Ya existe un usuario con ese nombre"<<endl;
  18. }
En línea

7w7
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Archivos
« Respuesta #9 en: 22 Noviembre 2018, 21:41 pm »

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

7w7
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines