#include <windows.h>
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <sys/stat.h>
typedef struct
{
int a;
double b;
char c[50];
}datos;
void crea_fich(FILE *pf)
{
int i;
datos uno;
uno.a=3;
uno.b=5.5;
strcpy(uno.c,"Hola mundo");
for(i=0;i<100;i++)
{
fwrite(&uno,sizeof(datos),1,pf);
}
}
void main()
{
FILE *pf;
int n_reg,op,fh,res;
if((pf=fopen("datos.dat","w"))==NULL)
{
printf("Error abriendo archivo");
return;
}
crea_fich(pf);
//calcular el numero de registros que hay en el ficrero: 100
fseek(pf,0L,SEEK_END);
n_reg=ftell(pf)/sizeof(datos);
printf("\n\tNumero de registros en el fichero: %d",n_reg);
printf("\n\tNumero de bytes: %d",n_reg*sizeof(datos));
//seleccionar a partir de que registro se truncará el fichero
printf("\n\n\tSelecciona numero de registro a partir\n\t del cual se truncara: ");
scanf("%d",&op);
op*=sizeof(datos);//el tamaño debe ser en bytes
fclose(pf);
//abrir el fichero
if((fh=_open("datos.dat",_O_RDWR,_S_IWRITE ))!=-1)
{
//cambiar el tamaño del archivo
if((res=_chsize(fh,(long)op))!=0)
{
printf("\n\tERROR no se ha podido cambiar el tamano");
fflush(stdin);
getchar();
return;
}
printf("\n\tEl archivo ha sido truncado!!!");
_close(fh);
if((pf=fopen("datos.dat","r"))==NULL)
{
printf("Error abriendo archivo");
fflush(stdin);
getchar();
return;
}
fseek(pf,0L,SEEK_END);
n_reg=ftell(pf)/sizeof(datos);
printf("\n\tNumero de registros en el fichero ahora: %d",n_reg);
fclose(pf);
}
fflush(stdin);
printf("\n\n\n\tPulsa <enter> para finalizar.");
getchar();
}