1. ホーム
  2. c

[解決済み] C言語でのファイルサイズはどのように決定するのですか?

2022-04-27 14:19:22

質問

ファイルのサイズをバイト単位で知るにはどうしたらいいですか?

#include <stdio.h>

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

どのように解決するのですか?

Unix系システムでは、POSIXシステムコールを使用することができます。 stat 道すがら 或いは fstat 既に開いているファイル記述子に対して(POSIX マンページ , Linux マンページ ).

(からファイルディスクリプタを取得する)。 open(2) 或いは fileno(FILE*) を stdio ストリーム上で実行します)。

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_t は2GBまでの値しか保持できません。のquot;LFSの使用法"の項を参照してください。 Linuxにおけるラージファイルのサポート をご覧ください。