Ayuda con modificación de archivos en C++
Publicado por Allan (18 intervenciones) el 24/04/2017 05:00:15
Ola, me gustaría que si pueden ayudarme a resolver un problema que tengo al programar la modificación de un registro de un archivo en lenguaje c++, estoy programando en Visual c++ soy principiante en esto de c++.
Cuando quiero modificar el registro uso varios tipos de modificaciones en internet pero ni uno me ha funcionado como:
Pero ninguno me da resultado el primero me copia el registro ya modificado hasta arriba del archivo, el segundo lo copia hasta el final del archivo y el ultimo no lo modifica nada, les dejo el código de la parte de la función que tengo fallas y también otra cosa;
¿Por que a veces visual no lee o ejecuta ciertas sentencias de código y no hay ninguna condición que impida que esa sentencia sea ejecutada?
Por su ayuda gracias...
Aquí esta el código
Cuando quiero modificar el registro uso varios tipos de modificaciones en internet pero ni uno me ha funcionado como:
1
2
3
4
5
6
dire_Fisica = articuloCodigo * sizeof(estructura);
//Tambien este
dire_Fisica = ftell(archivo) - sizeof(estructura);
//Igual este
while(!feof(archivo)
{......} //Aqui busco el codigo del articulo o producto linea por linea
Pero ninguno me da resultado el primero me copia el registro ya modificado hasta arriba del archivo, el segundo lo copia hasta el final del archivo y el ultimo no lo modifica nada, les dejo el código de la parte de la función que tengo fallas y también otra cosa;
¿Por que a veces visual no lee o ejecuta ciertas sentencias de código y no hay ninguna condición que impida que esa sentencia sea ejecutada?
Por su ayuda gracias...
Aquí esta el código
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
void egresosE()
{
FILE *archi;
archi = fopen(solu, "rb+");
clrscr();
long int dirFisica;
int artiCodi, exis=0;
char op= '\0';
gotoxy(5,5);
cout<<"======= Egresos de existencias =======";
if(archi == NULL)
{
gotoxy(10,7);
cout<<"Archivo dañado o no existe.";
gotoxy(10,9);
cout<<"Presione cualquier tecla para continuar...";
getch();
fclose(archi);
return;
}
gotoxy(10,7);
cout<<"Ingrese codigo del articulo: ";
cin>>artiCodi;
//--------------------------------------------Operaciones binarias-----------------------------------//
dirFisica = artiCodi * sizeof(archi);
fseek(archi, dirFisica, SEEK_SET);
fread(&articulos, sizeof(articulos),1,archi);
//------------------------------------Leer registro-------------------------------------//
//while(!feof(archi))
//{
if(artiCodi == articulos.codigo)
{
gotoxy(10,9);
cout<<"Codigo: "<<articulos.codigo;
gotoxy(10,10);
cout<<"Nombre: "<<articulos.nombre;
gotoxy(10,11);
cout<<"Existencia: "<<articulos.existencia;
gotoxy(10,13);
cout<<"Cuantas existencias desea quitar: ";
cin>>exis;
while(op != 's' && op != 'n')
{
gotoxy(10,14);
cout<<"Esta seguro que desea restar existencias [s/n] >>> ";
cin>>op;
}
if(op == 's')
{
if(exis > articulos.existencia)
{
gotoxy(10,20);
cout<<"Introdujo un numero mayor a las existencias.";
gotoxy(10,22);
cout<<"Presione cualquier tecla para continuar...";
fclose(archi);
getch();
return;
}
//---------------------------------Hacer la resta de las existencias--------------------------//
//fclose(archi);
//archi = fopen(solu, "rb+");
fseek(archi, dirFisica, SEEK_SET);
articulos.existencia -= exis;
fwrite(&articulos, sizeof(articulos), 1, archi);
gotoxy(10,16);
cout<<"Existencia modificada exitosamente.";
gotoxy(10,18);
cout<<"Existencias despues de la modificacion: ";
cout<<articulos.existencia;
//-----------------------------Cerrar archivo y funcion-------------------------------//
getch();
fclose(archi);
//break;
return;
}
else
if(op == 'n')
{
fclose(archi);
return;
}
}
//fread(&articulos, sizeof(articulos), 1, archi);
//}
if(artiCodi != articulos.codigo)
{
gotoxy(10,16);
cout<<"Codigo no existente.";
gotoxy(10,18);
cout<<"Presione cualquier tecla para continuar...";
getch();
fclose(archi);
}
}
Valora esta pregunta
0