How do you determine the size of a file in C?

前端 未结 14 1280
野性不改
野性不改 2020-11-22 03:20

How can I figure out the size of a file, in bytes?

#include 

unsigned int fsize(char* file){
  //what goes here?
}
14条回答
  •  暖寄归人
    2020-11-22 04:04

    **Don't do this (why?):

    Quoting the C99 standard doc that i found online: "Setting the file position indicator to end-of-file, as with fseek(file, 0, SEEK_END), has undefined behavior for a binary stream (because of possible trailing null characters) or for any stream with state-dependent encoding that does not assuredly end in the initial shift state.**

    Change the definition to int so that error messages can be transmitted, and then use fseek() and ftell() to determine the file size.

    int fsize(char* file) {
      int size;
      FILE* fh;
    
      fh = fopen(file, "rb"); //binary mode
      if(fh != NULL){
        if( fseek(fh, 0, SEEK_END) ){
          fclose(fh);
          return -1;
        }
    
        size = ftell(fh);
        fclose(fh);
        return size;
      }
    
      return -1; //error
    }
    

提交回复
热议问题