ファイルのサイズをバイト単位で確認するにはどうすればいいですか?
#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_t
2GBまでの値しか保持できません。Linux での大容量ファイルのサポート詳細については。