El otro dia estaba haciendo un programa de broma (Aunque bastante… digamos, desagradable) que llenaba un archivo de texto a base espacios (jj) pero necesitaba una forma de controlarlo y se me ocurrio hacer otro programa que comprobara el tamaño del archivo para no excederme. El programa no utiliza ninguna libreria de sistema o llamada a sistema por lo que pienso que es portable, de todos modos, si encuentran que no es portable en algun SO, me envian un mail, solo utilizo un puntero FILE y lo basico en abrir archivos. El codigo lo dejo aqui: (Es corto)
#include <stdio.h>
int main( int argc, char *argv[] ) {
FILE *archivo;
int contador = 1;
char recorrer=0;
unsigned long int size=0;
if ( argc < 2 ) {
printf("Uso: file archivo1\n file archivo1 archivo2\n");
getchar();
return 1;
}
while( contador < argc ) {
archivo=fopen( argv[contador], "rb" );
if (archivo==NULL){
printf("Archivo invalido");
return 1;
}
while( feof(archivo)==0 ) {
size +=1;
recorrer=getc(archivo);
}
fclose( archivo );
printf("El archivo %s tiene %f MB\n", argv[contador], (float)size/1000000); /*Eliminar si quieren*/
contador+=1;
size=0;
archivo=NULL;
}
return 0; /*Si quieren utilizarlo con los mismos fines que yo, entonces en vez de cero pongan size/1000000*/
}


No es necesario recorrerlo para tener el tamaño:
fopen(….
fseek(archivo, 0, SEEK_END); // Se posiciona al final del archivo
tamanio = ftell(archivo); // Devuelve la posición actual del archivo (en bytes)
fclose(…
printf(“Tamaño: %d\n”, tamanio);