C/Visual C - Modificar archivos binarios en c

 
Vista:
sin imagen de perfil

Modificar archivos binarios en c

Publicado por Bea (11 intervenciones) el 20/06/2016 21:33:17
Estoy haciendo una agenda de contactos, y me piden modificar datos por ejemplo el nombre de algun contacto, quisiera saber como hacer para modificarlo, con una pequeña idea me basta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Modificar archivos binarios en c

Publicado por Rafael (17 intervenciones) el 21/06/2016 00:16:16
no se entiende muy bien lo que deceas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 3
Ha disminuido su posición en 105 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Modificar archivos binarios en c

Publicado por Alfredo (8 intervenciones) el 21/06/2016 00:24:24
1.- Tienes que realizar una funcion que busque el elemento a modificar, esto tendria que ser en base a un ID de contacto
2.- Realizar una funcion para leer los datos del cotacto (registro)
3.- Realizar las modificaciones pertinentes
4.- Grabar esas modificaciones

Suerte !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Modificar archivos binarios en c

Publicado por agustin (272 intervenciones) el 21/06/2016 10:47:33
Si es solo cambiar un dato es como te indican. Si es eliminar un registro tendrías que, o bien volcar todo el archivo a la memoria modificando lo ahí y luego guardarlo en el archivo, o usar un archivo auxiliar donde lo guardas con los cambios y luego eliminas el original y renombras el auxiliar con el nombre del original.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Modificar archivos binarios en c

Publicado por Bea (11 intervenciones) el 22/06/2016 03:02:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
void modificar (char n[], char a[])
 
{
     FILE *f;
     persona p;
     int tam,i,b=0,c,k;
     char op[5];
 
     f=fopen("bin5.dat","r+");
 
     fseek(f,0,2);
 
     tam =ftell(f)/sizeof(persona);
 
	 rewind(f);
 
	for (i=0;i<tam;i++){
		fread (&p,sizeof(p),1,f);
		if (strcmp(p.apellido,a)==0 && strcmp(p.nombre,n)==0){
 
		do
	{
			do{
				printf ("(1)- Modificar nombre.\n");
				printf ("(2)- Modificar apellido.\n");
				printf ("(3)- Modificar domicilio.\n");
				printf ("(4)- Modificar fecha de nacimiento.\n");
				printf ("(5)- Salir del submenu.\n");
				printf ("Ingrese una opcion:");
				fgets (op,5,stdin);
				op[strlen(op)-1]='\0';
				controlnum(op,&c);
				if (c==1)
				   printf ("NO se ingreso un numero, vuelva a ingresar.\n");
			}while (c==1);
 
			switch (atoi(op)){
				case 1:{
 
					do{
					  printf ("Ingrese el nuevo nombre:");
					  fgets (p.nombre,50,stdin);
					  p.nombre[strlen(p.nombre)-1]='\0';
				   	  controlalf(p.nombre,&c);
				   	  if (c==1)
					      printf ("No se ngresaron solamente letras, vuelva a ingresar.\n");
					  else {
					  	fseek(f,-sizeof(p),1);
					  	fwrite(&p,sizeof(p),1,f);
					  	printf ("LOS DATOS FUERON MODIFICADOS.\n");
					  }
 
				    }while (c==1);
 
					break;
				}
 
 
 
				case 2:{
					printf ("Ingrese el nuevo apellido:");
					fgets (p.apellido,50,stdin);
					p.apellido[strlen(p.apellido)-1]='\0';
					 controlalf(p.apellido,&c);
				   	  if (c==1)
					      printf ("No se ngresaron solamente letras, vuelva a ingresar.\n");
					  else {
					  	fseek(f,-sizeof(p),1);
					  	fwrite(&p,sizeof(p),1,f);
					  	printf ("LOS DATOS FUERON MODIFICADOS.\n");
					  }
					break;
				}
 
				case 3:{
					printf ("Ingrese el nuevo domicilio.\n");
					p.dom=ingresardomicilio();
					fseek(f,-sizeof(p),1);
					fwrite (&p,sizeof(p),1,f);
					printf ("LOS DATOS FUERON MODIFICADOS.\n");
					break;
				}
 
				case 4:{
					printf ("Ingrese la nueva fecha de nacimiento.\n");
						do{
		printf("Ingrese el dia:");
		fgets (p.dia,10,stdin);
		p.dia[strlen(p.dia)-1]='\0';
		controlnum(p.dia,&c);
		if (c==1)
		  printf ("No se ingresaron solamente numeros, vuelva a ingresar.\n");
		else {
			controldia (p.dia,&k);
			if (k==1)
			  printf ("El dia ingresado no existe, vuelva a ingresar.\n");
		}
	}while (c==1 || k==1);
 
	do {
		printf ("Ingrese el mes:");
		fgets (p.mes,10,stdin);
		p.mes[strlen(p.mes)-1]='\0';
		controlnum(p.mes,&c);
		if (c==1)
		   printf ("No se ingresaron solamente numeros, vuelva a ingresar.\n");
		else{
			controlmes (p.mes,&k);
			if (k==1)
			  printf ("El mes ingresado no existe, vuelva a ingresar.\n");
		}
 
	}while (c==1 || k==1);
 
	do{
		printf ("Ingrese el año:");
		fgets (p.anio,10,stdin);
		p.anio[strlen(p.anio)-1]='\0';
		controlnum(p.anio,&c);
		if (c==1)
		  printf ("No se ingresaron solamente numeros, vuelva a ingresar.\n");
		else {
			controlanio (p.anio,&k);
			if (k==1)
			   printf ("El año ingresado no es correcto, vuelva a ingresar.\n");
		}
           	}while (c==1 || k==1);
 
           	fseek(f,-sizeof(p),1);
			fwrite(&p,sizeof(p),1,f);
			printf ("LOS DATOS FUERON MODIFICADOS.\n");
					break;
				}
 
 
			}
 
			b=1;
 
 
		}while (atoi(op)!=5);
 
    }
 
 
	}
 
	if (b==0)
	   printf ("No se encontro la persona.\n");
 
	fclose (f);
}

Hice esta funcion pero recibe valores basura, no se que esta mal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar