Problemas con operaciones en archivos

Fantasma
17 de Abril del 2005
Tengo problemas al tratar de ordenar la informacion dentro de un texto, lo he checado y parece correcto pero solo saca simbolos incoherentes:

FILE * Abrir_Cerrar(FILE *archivo, int modo, int tipo=0)
{
switch(modo)
{
case 0://Cerrar archivo
fclose(archivo);
break;
case 1://Abrir archivo
archivo=fopen(Archivo,"r+");

if(archivo!=NULL)
{
fclose(archivo);
if(!tipo)
archivo=fopen(Archivo,"ab+");
else
archivo=fopen(Archivo,"a+");
}
else
{
Error(2);
archivo=fopen(Archivo,"w+");
}
break;
}
return(archivo);
}

void Ordenar(void)
{
struct Definicion terminos[MaxPalabras],aux[1];
FILE *Diccionarios;

Diccionarios=Abrir_Cerrar(Diccionarios,1,0);

int cont=0,mover=sizeof(struct Definicion);

while(!feof(Diccionarios) && cont<MaxPalabras)//guardo todo el archivo en terminos
{
cont++;
fread(&terminos[cont],mover*cont,1,Diccionarios);
}

Diccionarios=Abrir_Cerrar(Diccionarios,0);
for(int a=0;a<cont;a++)
{
for(int b=0;b<cont;b++)
{
if((strcmp(terminos[a].Catalano,terminos[b].Catalano))>0)// de A - Z
{
strcpy(aux[0].Catalano,terminos[a].Catalano);
strcpy(aux[0].Ingles,terminos[a].Ingles);
strcpy(terminos[a].Catalano,terminos[a+1].Catalano);
strcpy(terminos[a].Ingles,terminos[a+1].Ingles);
strcpy(terminos[a+1].Catalano,aux[0].Catalano);
strcpy(terminos[a+1].Ingles,aux[0].Ingles);
}
}
}

int escritura;
Diccionarios=fopen(Archivo,"w+");
for(a=0;a<cont;a++)
{
escritura=fwrite(&terminos,mover*a,1,Diccionarios);

if(escritura!=1)
{
Error(3);
break;
}
}

if(a==cont)
printf("nn El archivo ha sido ordenado de forma correcta!!");
else
printf("nn El archivo no pudo ser ordenado");

Diccionarios=Abrir_Cerrar(Diccionarios,0);
}

El codigo esta aqui si me dicen que podra ser podre arreglar las demás funciones, ya que también tengo problemas de esta indole al tratar de eliminar o leer el 3 dato almacenado en el archivo.

Jamas he podido leer el 3 registro dentro del archivo porque?