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;
}
Run Code Online (Sandbox Code Playgroud)
标准的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;
}
Run Code Online (Sandbox Code Playgroud)
如果您想知道多字节字符的数量,您需要使用例如读取整个文件fgetwc.
FILE *source = fopen("File.txt", "r");
fseek(source, 0, SEEK_END);
int byteCount = ftell(source);
fclose(source);
Run Code Online (Sandbox Code Playgroud)