El problema que tienes es que, tal y como reza la especificación, el comportamiento de "fseek(file, x, SEEK_END)" es indeterminado en el caso de ficheros binarios. Esto se debe a la aparición de caracteres nulos que pueden hacer inviable encontrar el final del buffer... en consecuencia, cualquier desplazamiento relativo al final del fichero da un resultado indeterminado.
Para conocer el tamaño del fichero deberías echar un vistazo a fstat():
*
fstat en Windows
*
fstat en Linux
Un saludo.