[ Foro de C ]

Mi programa necesita eliminar un dato reescribiendo los demas en un archivo aux

05-May-2017 04:51
Invitado (A F)
0 Respuestas

Son algunas partes del programa para que se den una idea pero en si esa es la funcion que necesito, por favor, ya intente todo xc
#define MYFILE "AlumnosMAC"

typedef struct
{
char Nombre[50];
char NumCuenta[10];
Calificaciones Alumnos;

}A;


Eliminar(A *DatosAlum,int *ContA,FILE *ArchivoAlum)
{
FILE *auxArchivoAlum;
int encontrado,i=0,cerrado,auxcerrado,opc,sn;
long int posicion;
char elimina[10];
printf("Escriba el numero de cuenta del alumno que desea dar de baja:\t");
gets(elimina);
auxArchivoAlum=fopen("Alumnos MAC 2","wb+");
ArchivoAlum=fopen(MYFILE,"rb+");

if(ArchivoAlum==NULL && auxArchivoAlum==NULL)
{

       printf("No se pudo abrir, el archivo no ha sido creado");
}
else      
{

fread(&DatosAlum[i],sizeof(A),1,ArchivoAlum);    

while(!feof(ArchivoAlum))
{
       
    fread(&DatosAlum[i],sizeof(A),1,ArchivoAlum);
                    encontrado=(strcmp(elimina,DatosAlum[i].NumCuenta));
                          if(encontrado==0)
                        {
                printf("Alumno: \t %s \n ",DatosAlum[i].Nombre);
               
                posicion=ftell(ArchivoAlum)-sizeof(A);
               // break;
               
          i++;              
         
         
                       
          }
         else
         {
             fwrite(&DatosAlum[i],sizeof(A),1,auxArchivoAlum);
          fflush(stdin);
          i++;  
         fread(&DatosAlum[i],sizeof(A),1,ArchivoAlum);
           
         }
       //fread(&DatosAlum[i],sizeof(A),1,ArchivoAlum);  
}

 if(encontrado!=0)
 {
 printf("No se pudo encontrar el registro");
                                     
 }
}  
 



cerrado=fclose(ArchivoAlum);
auxcerrado=fclose(ArchivoAlum);

if(cerrado==EOF && auxcerrado==EOF)
{
printf("El archivo no se puede cerrar");
}      
//int remove("MYFILE");
//int rename("Alumnos MAC 2","MYFILE");
             
}




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)