Problema estructuras en archivos binarios
Publicado por Juan Manuel (2 intervenciones) el 08/11/2007 02:23:28
Gente estoy teniendo un problema con una estructura. Cuando intento grabarla en un archivo binario va modificando su tamaño a medida que se le agregan registros. Aviso que uso la consola y no objetos, o sea Archivos .CPP
typedef struct
{
char talle[2];
char descripcion[20];
float valor;
int codart;
int stockact;
int codrubro;
int activo;
int codmarca;
}articulo;
Esta es la estructura que tengo creada para el articulo.
arcarticulos=fopen("articulos.dat","a");
fwrite(&auxart,sizeof(articulo),1,arcarticulos);
De esta forma hago que se vaya agregando al archivo binario, al final del mismo.
Ahora por alguna razon, cada vez que se envia informacion algo pasa.
Al comienzo cuando se graba 1 sola estructura son 49bytes, pero cuando se le agrega otra mas pasan a ser 98bytes, para cuando se agrega una 3ra pasan a ser 146.
Lo cual no me permite despues del segundo elemento buscar los siguientes sin hacer un toqueteo asqueroso en el codigo para que encuentre registro por registro casi manualmente.
Alguien sabe que sucede? o si esto es normal y como se puede arreglar?
ACA DEJO TODO EL CODIGO A VER SI PUEDE ALGUIEN AYUDARME YA QUE MAÑANA TENGO QUE ENTREGARLO Y ESTO ME TIENE LOCO DESDE EL DOMINGO.
#include <stdio.h>
#include "Consola.h"
#include <Conio.h>
#include <fstream.h>
#include <dos.h>
#include <windows.h>
#include <string.h>
#include <io.h>
typedef struct
{
char talle[4];
char descripcion[20];
float valor;
int codart;
int stockact;
int codrubro;
int activo;
int codmarca;
}articulo;
void main (void)
{
FILE *arcarticulos;
articulo auxart;
int conf=0,oks=0,maxarc=0,codigo;
bool grabar=true,salir=false;
do
{
clrscr();
printf("\t\t\t\tMENU ARTICULOS\n");
printf("\t\t\t\tALTA ARTICULOS\n");
if ((arcarticulos=fopen("articulos.dat","r"))!=NULL)
{
fseek( arcarticulos,0,SEEK_END);
maxarc=ftell(arcarticulos);
codigo=((maxarc)/(sizeof(articulo)))+1;
fclose(arcarticulos);
}
else
codigo=1;
printf("\nCodigo de Articulo: %d",codigo);
printf("\nDescripcion: ");
fflush(stdin);
gets(auxart.descripcion);
printf("\nTalle: ");
fflush(stdin);
gets(auxart.talle);
printf("\nCodigo Rubro: ");
scanf("%d",&auxart.codrubro);
printf("\nCodigo Marca: ");
scanf("%d",&auxart.codmarca);
printf("\nStock: ");
scanf("%d",&auxart.stockact);
printf("\nPrecio Unitario: ");
scanf("%5.2f",&auxart.valor);
arcarticulos=fopen("articulos.dat","a");
auxart.activo=1;
auxart.codart=codigo;
fwrite(&auxart,sizeof(articulo),1,arcarticulos);
fclose(arcarticulos);
}while(!salir);
fflush(stdin);
}
typedef struct
{
char talle[2];
char descripcion[20];
float valor;
int codart;
int stockact;
int codrubro;
int activo;
int codmarca;
}articulo;
Esta es la estructura que tengo creada para el articulo.
arcarticulos=fopen("articulos.dat","a");
fwrite(&auxart,sizeof(articulo),1,arcarticulos);
De esta forma hago que se vaya agregando al archivo binario, al final del mismo.
Ahora por alguna razon, cada vez que se envia informacion algo pasa.
Al comienzo cuando se graba 1 sola estructura son 49bytes, pero cuando se le agrega otra mas pasan a ser 98bytes, para cuando se agrega una 3ra pasan a ser 146.
Lo cual no me permite despues del segundo elemento buscar los siguientes sin hacer un toqueteo asqueroso en el codigo para que encuentre registro por registro casi manualmente.
Alguien sabe que sucede? o si esto es normal y como se puede arreglar?
ACA DEJO TODO EL CODIGO A VER SI PUEDE ALGUIEN AYUDARME YA QUE MAÑANA TENGO QUE ENTREGARLO Y ESTO ME TIENE LOCO DESDE EL DOMINGO.
#include <stdio.h>
#include "Consola.h"
#include <Conio.h>
#include <fstream.h>
#include <dos.h>
#include <windows.h>
#include <string.h>
#include <io.h>
typedef struct
{
char talle[4];
char descripcion[20];
float valor;
int codart;
int stockact;
int codrubro;
int activo;
int codmarca;
}articulo;
void main (void)
{
FILE *arcarticulos;
articulo auxart;
int conf=0,oks=0,maxarc=0,codigo;
bool grabar=true,salir=false;
do
{
clrscr();
printf("\t\t\t\tMENU ARTICULOS\n");
printf("\t\t\t\tALTA ARTICULOS\n");
if ((arcarticulos=fopen("articulos.dat","r"))!=NULL)
{
fseek( arcarticulos,0,SEEK_END);
maxarc=ftell(arcarticulos);
codigo=((maxarc)/(sizeof(articulo)))+1;
fclose(arcarticulos);
}
else
codigo=1;
printf("\nCodigo de Articulo: %d",codigo);
printf("\nDescripcion: ");
fflush(stdin);
gets(auxart.descripcion);
printf("\nTalle: ");
fflush(stdin);
gets(auxart.talle);
printf("\nCodigo Rubro: ");
scanf("%d",&auxart.codrubro);
printf("\nCodigo Marca: ");
scanf("%d",&auxart.codmarca);
printf("\nStock: ");
scanf("%d",&auxart.stockact);
printf("\nPrecio Unitario: ");
scanf("%5.2f",&auxart.valor);
arcarticulos=fopen("articulos.dat","a");
auxart.activo=1;
auxart.codart=codigo;
fwrite(&auxart,sizeof(articulo),1,arcarticulos);
fclose(arcarticulos);
}while(!salir);
fflush(stdin);
}
Valora esta pregunta


0