archivos

ams
11 de Noviembre del 2004
necesito saber como se eliminan o dan de baja datos de archivos cuando se usan estructuras y como se pueden cambiar, esto es algo de lo que estoy trabajando, espero me puedan ayudar

/*Programa que hace uso de archivos y pide los datos en un restaurante */


#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iomanip.h>
#include <ctype.h>
#include <fstream.h>
#include <fcntl.h>

struct restaurante
{
char platillo [40];
char noplat [10];
char precio[6];
char mesa [20];
};

restaurante orden [20];
main()
{

clrscr();
getch();
fstream archivo;
int a=0;
char rpt;
archivo.open ("archivo.txt", ios::binary|ios::out);

for(;;)
{

clrscr();
gotoxy (15,2); cout<<"platillo ("<<a+1<<"):";gets(orden[a].platillo);
gotoxy (15,4); cout<<"Cuantos platillos ("<<a+1<<"):";cin>>(orden[a].noplat);
gotoxy (15,6); cout<<"precio ("<<a+1<<"): $";cin>>(orden[a].precio);
gotoxy (15,8); cout<<"No.mesa ("<<a+1<<"):";gets(orden[a].mesa);

archivo.write (orden[a].platillo, sizeof(orden[a].platillo));
archivo.write (orden[a].noplat, sizeof(orden[a].noplat));
archivo.write (orden[a].precio, sizeof(orden[a].precio));
archivo.write (orden[a].mesa, sizeof(orden[a].mesa));

gotoxy (10,24);cout<<"deseas ordenar otro platillo [s] [n]";cin>>rpt;

a=a+1;

rpt=toupper(rpt);
if(rpt == 'N') break;
}

archivo.close ();
clrscr();
gotoxy (15,12);cout<<"Gracias por usar el servicio...";
return 0;
}



chuidiang
11 de Noviembre del 2004
Hola:

No puedes borrar una estructura de un fichero de forma sencilla.

Para hacerlo, tienes dos opciones

1. Cada estructura lleva una marca de si es valida o no. Cuando borres, unicamente tienes que sobre-escribirla con la marca de valida a no. (echa un ojo a metodos como seek() que permiten moverte por el fichero). A la hora de leer registros para presentarlos en pantalla, tienes que saltarte los que tienen la marca de no validos.

2. Copiar el fichero entero en otro fichero, pero saltandote la estructura que has leido.

Puesto que la segunda opción es lenta, lo que se puede hacer es la 1, pero en algún momento (al salir o entrar de la aplicacion o a peticion del usuario) realizar la copia del fichero eliminando todos los registros marcados como no válidos.

Se bueno.