C/Visual C - Borrar registro de ficheros

 
Vista:

Borrar registro de ficheros

Publicado por Carlota (4 intervenciones) el 13/05/2008 12:08:09
ola, tengo un problema con un ejercicio k estoy realizando. es el tipico programa de agenda para agregar,bajas..pero con estructuras y ficheros. Mi problema es como borrar un registro de un fichero, es decir,borrar un dat de la agenda que lo tengo almacenado en un fichero. Por favor contestarme si podeis me es urgente o agregarme al msn. kurtis_granada.com. este es el codigo:

#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

struct coches
{
char matricula[10];
long anio_compra;
long precio;
};

void alta_vehiculo();
void visualizar();
void borrar_archivo();
void baja_vehiculo();

void main()
{

int opcion;
opcion=0;
do
{
printf(" ********************************** ");
printf(" - MENU - ");
printf(" ********************************** ");
printf(" 1- Alta de vehiculo ");
printf(" 2- Baja de vehiculo ");
printf(" 3- Visualizar vehiculos ");
printf(" 4- Borrado del archivo ");
printf(" 5- Salir ");
printf(" Introduzca una opcion: ");
fflush(stdin);
scanf("%i",&opcion);

switch(opcion)
{
case 1: alta_vehiculo(); break;
case 2: baja_vehiculo(); break;
case 3: visualizar(); break;
case 4: borrar_archivo(); break;
case 5: break;

}
}
while(opcion <5);

}

/********************************************************************************/
void alta_vehiculo()
{
struct coches datos; //variable para meter los datos al fichero
FILE *fichero;
clrscr(); //borrar pantalla

fichero = fopen("vehiculos.dat", "ab");
if(fichero == NULL)
{
printf("ERROR");
exit(0);
}

printf("Introduzca matricula del coche: ");
fflush(stdin);
scanf("%s",&datos.matricula); //meto los datos de uno en uno

printf("Introduzca el año de compra: ");
fflush(stdin);
scanf("%li",&datos.anio_compra);

printf("Introduzca el precio de tasacion: ");
fflush(stdin);
scanf("%li",&datos.precio);

fwrite(&datos, sizeof(datos), 1, fichero); //meto los datos en los ficheros y vuelve al menu


clrscr();

fclose(fichero);
}
/*******************************************************************************/
void visualizar()
{
struct coches datos; //variable para leer los datos
FILE *fichero;
int i;
clrscr();

fichero = fopen("vehiculos.dat", "rb");
if(fichero == NULL)
{
printf("ERROR");
exit(0);
}

while(!feof(fichero)) //leer hasta que sea final de fichero
{
fread(&datos,sizeof(datos),1,fichero); //leer el contenido del fichero
printf("Los vehiculos registrados son: "); //despues los muestro uno a uno = que como los meti en el fichero
printf(" ");
printf("Matricula: %s ",datos.matricula);
printf("Año de compra: %li ",datos.anio_compra);
printf("Precio de Tasacion: %li ",datos.precio);
printf("*****************************: ");
}
fclose(fichero);
getch(); //esperar
clrscr();

}
/*******************************************************************************/
void borrar_archivo()
{
FILE *fichero;

clrscr();
remove("vehiculos.dat"); //borra el fichero
printf("El archivo se borro correctamente...");
getch();
clrscr();

}

/*******************************************************************************/
void baja_vehiculo()
{

}
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

RE:Borrar registro de ficheros

Publicado por Tom (619 intervenciones) el 13/05/2008 17:06:46
El método utilizado normalmente consiste en poner una marca de "borrado" al registro.
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

RE:Borrar registro de ficheros

Publicado por j (1 intervención) el 17/05/2008 23:17:16
A lo que se refiere Tom es a un "borrado lógico" del registro, no físico. Vos le pones en un campo la letra F por ejemplo y despues preguntas por eso en la estructura condicional correspondiente.
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

RE:Borrar registro de ficheros

Publicado por Rony (1 intervención) el 29/10/2008 02:18:38
entra a este link http://www.yoreparo.com/foros/programacion/51582.html

explica con ejemplos la forma mas eficiente de borrar bytes de un fichero
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

RE:Borrar registro de ficheros

Publicado por dario (1 intervención) el 04/09/2009 02:21:09
buen programa pero falta para lo que busco, pero = lo implemto.. agregame [email protected]
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

RE:Borrar registro de ficheros

Publicado por Bili Gates (1 intervención) el 05/05/2010 05:43:35
int feliminar(FILE **p){
FILE *f;
char search [10];
struct cliente c;
int sw = 0;
char respuesta;

clrscr();

printf("\nIngrese RUT a Eliminar: ");
fflush(stdin);
gets(search);

(*p) = fopen("C:/datos.dat","rb");
while ((!feof((*p))) && (sw == 0)){
fread (&c,sizeof(c),1,(*p));
if(feof((*p)))
break;
if (strcmp(c.rut , search) == 0){
sw = 1;
printf("\n\nrut: %s", c.rut);
printf("\nnombre: %s", c.nombre);
printf("\ndireccion: %s", c.direccion);
c.valido='s';
printf("\ndirasdasd: %s", c.valido);
printf("\n\n\n\n ¿Desea Elimnar este dato realmente? \n S/N");
scanf("%c", &respuesta);
if (respuesta == 's'){
feliminar2(&f);
}
getch();
}
}
return(0);

}


feliminar2(FILE **p){
FILE *f;
struct cliente c;

f = fopen("datos.tmp", "wb");
rewind(*p);
while(fread(&c, sizeof(struct cliente), 1, *p))
if(c.valido == 's')
fwrite(&c, sizeof(struct cliente), 1, f);
fclose(f);
fclose(*p);
remove("datos.bak");
rename("datos.dat", "datos.bak");
rename("datos.tmp", "datos.dat");
*p = fopen("datos.dat", "rb+");
printf("dato eliminado");
getch();
return(0);

}
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