C でファイルのサイズをどのように判断しますか? 質問する

C でファイルのサイズをどのように判断しますか? 質問する

ファイルのサイズをバイト単位で確認するにはどうすればいいですか?

#include <stdio.h>

unsigned int fsize(char* file){
  //what goes here?
}

ベストアンサー1

Unix 系システムでは、POSIX システム コールを使用できます。stat道の上で、またはfstat既に開いているファイル記述子(POSIXマニュアルページ、Linuxマニュアルページ)。 ( 、またはstdio ストリームから
ファイル記述子を取得します)。open(2)fileno(FILE*)

NilObject のコードに基づく:

#include <sys/stat.h>
#include <sys/types.h>

off_t fsize(const char *filename) {
    struct stat st; 

    if (stat(filename, &st) == 0)
        return st.st_size;

    return -1; 
}

変更点:

  • ファイル名引数を にしましたconst char
  • struct stat変数名が欠落していた定義を修正しました。
  • -1エラーの場合は ではなく を返しますが0、空のファイルの場合はあいまいになります。off_tは符号付き型なので、これは可能です。

fsize()エラー時にメッセージを印刷したい場合は、次のようにします。

#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>

off_t fsize(const char *filename) {
    struct stat st;

    if (stat(filename, &st) == 0)
        return st.st_size;

    fprintf(stderr, "Cannot determine size of %s: %s\n",
            filename, strerror(errno));

    return -1;
}

32ビットシステムでは、これをオプション付きでコンパイルする必要があります-D_FILE_OFFSET_BITS=64。そうしないと、off_t2GBまでの値しか保持できません。Linux での大容量ファイルのサポート詳細については。

おすすめ記事