Способ POSIX (вероятно, что вы хотите):
off_t get_file_length( FILE *file ) {
fpos_t position; // fpos_t may be a struct and store multibyte info
off_t length; // off_t is integral type, perhaps long long
fgetpos( file, &position ); // save previous position in file
fseeko( file, 0, SEEK_END ); // seek to end
length = ftello( file ); // determine offset of end
fsetpos( file, &position ); // restore position
return length;
}
Стандартный способ C (педантичный):
long get_file_length( FILE *file ) {
fpos_t position; // fpos_t may be a struct and store multibyte info
long length; // break support for large files on 32-bit systems
fgetpos( file, &position ); // save previous position in file
if ( fseek( file, 0, SEEK_END ) // seek to end
|| ( length = ftell( file ) ) == -1 ) { // determine offset of end
perror( "Finding file length" ); // handle overflow
}
fsetpos( file, &position ); // restore position
return length;
}
Если вы хотите узнать количество многобайтовых символов, вам нужно прочитать весь файл, например, fgetwc
.