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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Manejo de archivos en C. Borrar registro
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Manejo de archivos en C. Borrar registro  (Leído 15,520 veces)
Torino10

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Manejo de archivos en C. Borrar registro
« en: 13 Mayo 2012, 06:18 am »

Hola como están!

Les hago una consulta.
Resulta que tengo un archivo en donde guardo datos de una estructura.
Estoy creando una funcion para poder "borrar" los registros que voy guardando de acuerdo a un codigo que me es ingresado por el usuario.

Tengo un miembro en la estructura al que llamo "borrado", de tipo char el cual toma los valores "s" o "n" dependiendo de como se encuentre.

En la funcion despues de realizar la busqueda, encuentro el registro y muestro los datos que trae en pantalla.

La duda es como cambiar el valor de solo ese mientro a "s" para indicar que fue borrado.

Dejo un fragmento del codigo para mostrar como lo estoy haciendo.

Código
  1. FILE *archivo;
  2. struct personas persona;
  3.  
  4. archivo=fopen("personas.txt", "rb+");
  5.  
  6. fseek(archivo, sizeof(struct personas)*(buscarpersona(archivo, codigo)-1), 0);
  7. //La funcion buscar persona me devuelve el registro buscado, resto uno para posicionarme y despues "borrar"
  8. fread(&persona, sizeof(struct personas), 1, archivo);
  9.  
  10. strcpy(persona.borrado, "s");
  11.  
  12. fwrite(&persona, sizeof(struct personas), 1, archivo);
  13. fclose(archivo);          
  14.  

Espero que me puedan tirar unas ideas. Saludos y gracias!


En línea

"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"
satu


Desconectado Desconectado

Mensajes: 301

Siempre aprendiendo


Ver Perfil WWW
Re: Manejo de archivos en C. Borrar registro
« Respuesta #1 en: 13 Mayo 2012, 13:53 pm »

Hola

Al ser un char no necesitas strcpy, eso es para char*. Utiliza la asignación normal:
persona.borrado = 's';

Saludos


En línea

Breakbeat como forma de vida
durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Manejo de archivos en C. Borrar registro
« Respuesta #2 en: 13 Mayo 2012, 17:14 pm »

Hola! es como dice satu si vas a usar un char pone 's'.. Ademas despues de actualizar ese dato, antes de volver a escribir en el archivo tenes q volver  a posicionar el cursor, sino estarias guardando mal
Código
  1. FILE *archivo;
  2. struct personas persona;
  3.  
  4. archivo=fopen("personas.txt", "rb+");
  5.  
  6. fseek(archivo, sizeof(struct personas)*(buscarpersona(archivo, codigo)-1), 0);
  7. //La funcion buscar persona me devuelve el registro buscado, resto uno para posicionarme y despues "borrar"
  8. fread(&persona, sizeof(struct personas), 1, archivo);
  9.  
  10. strcpy(persona.borrado, "s");
  11.  
  12. fseek(archivo, sizeof(struct personas)*(buscarpersona(archivo, codigo)-1), 0);  /* vuelvo a posicionar el cursor correctamente */
  13.  
  14. fwrite(&persona, sizeof(struct personas), 1, archivo); // despues guardo
  15. fclose(archivo);

Para no llamar a la funcion buscapersona() dos veces te conviene almacenar en una variable lo q retorna, y usar ese dato en los fseek

Saludos
En línea

Ahorrate una pregunta, lee el man
Torino10

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Manejo de archivos en C. Borrar registro
« Respuesta #3 en: 15 Mayo 2012, 03:12 am »

Hola! Gracias por responder!

Les comento que realice las correcciones que me dijeron pero me surgio el siguiente problema.

Cuando borro el registro, es decir cuando cambio al valor 's', se me esta modificando el registro anterior.
Probe quitando el -1 que agrego al valor que devuelve la funcion de busqueda y lo que hace es sobre escribir el registro siguiente.

Que estoy haciendo mal?
En línea

"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"
Torino10

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Manejo de archivos en C. Borrar registro
« Respuesta #4 en: 15 Mayo 2012, 03:21 am »

Ya solucione el problema!

Estaba mostrando mal los datos y por eso no me daba cuenta de que el borrado era correcto!

Muchisimas gracias por su ayuda!
En línea

"Tanto si crees que puedes, como si crees que no puedes, estas en lo correcto"
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Manejo basico del registro. « 1 2 3 »
Programación Visual Basic
byebye 23 27,375 Último mensaje 6 Marzo 2005, 06:06 am
por {_The_Alwar_}
manejo de datos, comparar cadenas, borrar un contenido de una cadena
Programación Visual Basic
-Xenon- 5 4,812 Último mensaje 20 Enero 2006, 14:49 pm
por -Xenon-
Manejo del Registro de Windows con VB
Programación Visual Basic
SeroS 6 3,615 Último mensaje 5 Mayo 2006, 06:35 am
por SeroS
como puedo borrar Archivos del registro?
Programación Visual Basic
Sai-To 3 2,527 Último mensaje 1 Marzo 2008, 12:20 pm
por ~~
Manejo del registro
Windows
criskapunk 1 2,360 Último mensaje 15 Julio 2010, 15:40 pm
por Novlucker
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines