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

 

 


Tema destacado: Estamos en la red social de Mastodon


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

Desconectado Desconectado

Mensajes: 35


Ver Perfil
modificar un registro con fwrite
« en: 28 Julio 2011, 00:00 am »

amigos quisiera saber si este procedimiento es correcto

dado un struct cualquiera

Código:
struct fecha
{
    int dia,mes,anyo;
};
Código:
void modificar_registro(struct fecha reg, int pos)
{
   FILE* p=fopen("fechas.dat","rb+")
    
   fseek(p, sizeof reg * pos, 0);

   fwrite( &reg, sizeof reg, 1, p);

   fclose(p);
}

Código:
int main()
{
       struct fecha vFechas[10];

       // vFechas = X; // se inicialisa de alguna forma, no importa

       // le paso la posicion 5 que es un registro dentro del vector.
       // el registro 5 es el que se supone que se quiera modificar
       modificar_registro(vFechas[5], 5);

      return 0;
}


lo que quiero saber es si la funcion de modificar_registro funcionaria de esa manera?, si esta mal quisiera saber como seria esto

      ;)



« Última modificación: 28 Julio 2011, 00:05 am por neo_from_cs_matrix » En línea

naderST


Desconectado Desconectado

Mensajes: 625



Ver Perfil WWW
Re: modificar un registro con fwrite
« Respuesta #1 en: 28 Julio 2011, 00:26 am »

Parece estar bien, lo único que veo es que abres el archivo en modo lectura y deberías abrirlo en modo de escritura 'wb' o 'ab' te vendría mejor en tu caso para que no se borre el contenido del archivo.


En línea

Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: modificar un registro con fwrite
« Respuesta #2 en: 28 Julio 2011, 02:40 am »

Citar
Parece estar bien, lo único que veo es que abres el archivo en modo lectura y deberías abrirlo en modo de escritura 'wb' o 'ab' te vendría mejor en tu caso para que no se borre el contenido del archivo.

Fijate que puso "rb+", osea también puede escribir en el archivo.
Está bien lo que hacés, presta atención no más que cuando haces esto:
Código
  1. modificar_registro(vFechas[5], 5);
El valor de vFechas[ 5 ] tiene que ser el NUEVO valor a ingresar, no el dato a borrar. Si es así, está bien.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: modificar un registro con fwrite
« Respuesta #3 en: 28 Julio 2011, 11:17 am »

¡Buenas!

En lugar de depender de un tipo de dato en concreto, puedes hacer una funcion mas general, por ejemplo:

Código
  1.  
  2. size_t fposwrite(unsigned long pos , void* dato_ptr , size_t tam_dato , size_t nrep , FILE* f)
  3. {
  4.    fseek(f , pos * tam_dato , SEEK_SET);
  5.    return fwrite(dato_ptr , tam_dato , nrep , f);
  6. }
  7.  
  8. //ejemplo de llamada
  9. fposwrite(5 , &vFechas[5] , sizeof(struct fecha) , 1 , p);
  10.  
  11.  

Y para la lectura lo mismo:

Código
  1.  
  2. size_t fposread(unsigned long pos , void* dato_ptr , size_t tam_dato , size_t nrep , FILE* f)
  3. {
  4.    fseek(f , pos * tam_dato , SEEK_SET);
  5.    return fread(dato_ptr , tam_dato , nrep , f);
  6. }
  7.  
  8. //ejemplo de llamada
  9. fposread(3 , &vFechas[3] , sizeof(struct fecha) , 1 , p);
  10.  
  11.  

Al utilizar punteros a void y la similitud con las llamadas a fwrite y fread, haces que el codigo sea mas general e intuitivo, y te olvidas de declarar funciones de lectura y escritura para cada tipo de dato que crees. Eso si, tendras que abrir el fichero en el modo correcto antes de realizar cualquier llamada a alguna de estas funciones (como lo harias con cualquier otro fichero y las operaciones de stdio) y luego cerrarlo. XD

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
neo_from_cs_matrix

Desconectado Desconectado

Mensajes: 35


Ver Perfil
Re: modificar un registro con fwrite
« Respuesta #4 en: 29 Julio 2011, 22:44 pm »

muy bueno muchachos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
modificar registro
Programación Visual Basic
rubeng 4 2,255 Último mensaje 17 Junio 2006, 18:17 pm
por rubeng
modificar registro
Programación Visual Basic
samue118 9 2,610 Último mensaje 25 Julio 2008, 19:27 pm
por Rudy21
fwrite y estructuras
Programación C/C++
m@o_614 4 6,359 Último mensaje 6 Noviembre 2013, 02:33 am
por rir3760
Modificar tiempo conexión USB en registro. Ofrezco compensación.
Hacking
Berrendo 0 521 Último mensaje 23 Mayo 2024, 08:55 am
por Berrendo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines