C言語認識ファイルサイズ
つまらないから...
ファイルサイズ認識の第1の反応は当然fileシリーズ関数を用いる.コードは次のとおりです.
#include <stdio.h>
int main()
{
FILE *fp;
fpos_t pos; //stream
fp = fopen("./test2.txt","rb");
fseek(fp, 0, SEEK_END); //fseek fp 0 ,
fgetpos(fp, &pos);//fgetos fp pos
rewind(fp);// stream , EOF .
printf("fileSize = %lld\r
",pos);// pos , ,
printf("orig pos = %d\r
",fp);//fp
return 0;
}
ほとんどのファイルを処理できるので注意しなければならないのはstdioです.h定義fpos_tはint 64、つまりファイルサイズが2の32次(つまり4 G)を超えるとfseekは処理できない
はい、結果は0になります.4 Gより大きいファイルを処理するには_fseeki64().
最後のfpクリアについては、いろいろなやり方があります(マイクロソフトがこのようなクリア方式を定義して何の意味があるのか分かりません...)1. rewind(fp); 2. fpos_t currentPos = ftell(fp);//現在のファイルポインタの位置を取得すると、ファイルポインタfsetpos(fp,¤tPos);//与えられたストリームの位置ポインタをpositionオブジェクトによって指定する位置3に移動する.fpos_t currentPos = ftell(fp); fseek(File,currentPos,SEEK_SET);//元のファイルポインタ位置に復元(SEEK_SETファイル開始位置から検索)
ネットで見る別の方法を添付します.
#include <stdio.h>
#include <sys/stat.h>
int main()
{
struct stat f_stat;
if( stat("test2.txt", &f_stat ) == -1 )
{
return -1;
}
printf("size = %u\r
",(long long int)f_stat.st_size);
}
この方法は簡単ですが、4 G以上のファイルはサポートされていません.