質問
たいのですが、ファイルのサイズ、バイト?
#include <stdio.h>
unsigned int fsize(char* file){
//what goes here?
}
解決
に基づく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にサンプルがあります。の利用LFSョン 大きなファイルをLinuxでは、controlelrディレクトリにて支援 ます。
他のヒント
使用しない int
.ファイル2ギガバイトのサイズに共通して汚れをこれらの日
使用しない unsigned int
.ファイルに4ギガバイトのサイズに共通して少し少ない共通の汚れ
IIRCの標準ライブラリを定義し off_t
として符号なし64ビット整数のかかるすべきます。また再定義することが知られ128ビットの数年間がこの16exabyteファイルを掛けます。
まwindowsを使用してみてください GetFileSizeEx で実際に使用符号付きの64ビット整数、その開始を打つの問題8exabyteファイルです。愚Microsoft!:-)
マットソリューションは作れないことを除いてC++ではなくCの初期伝いが必要になります。
unsigned long fsize(char* file)
{
FILE * f = fopen(file, "r");
fseek(f, 0, SEEK_END);
unsigned long len = (unsigned long)ftell(f);
fclose(f);
return len;
}
固定おり引き締ます。;)
更新:このようになっている。この限定4GBファイルWindowsでのが遅いだけ用プラットフォーム固有の電話のように GetFileSizeEx
または stat64
.
**さんのこと(なぜですか?):
引用のC99標準のdocからオンライン:"設定ファイルの位置をファイルの終わり、fseek(ファイル,0,SEEK_END)は、定義されていない動作のためのバイナリストリームで最後にnull文字)、またはストリーム状態依存性のエンコードしないサ末の初期化の状態です。**
定義を変更するときはintうエラーメッセージを伝えることのできる、その利用fseek()およびftell()を決定するファイルのサイズです。
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
}
がん細を標準cライブラリ:
#include <sys/stat.h>
off_t fsize(char *file) {
struct stat filestat;
if (stat(file, &filestat) == 0) {
return filestat.st_size;
}
return 0;
}
POSIX
の POSIX 標準は、独自に取得するメソッドをファイルのサイズです。
などの sys/stat.h
ヘッダに使用します。
概要
- 取得ファイルの利用統計
stat(3)
. - を取得
st_size
物件です。
例
注意:サイズ制限を 4GB
.ない場合 Fat32
ファイルシステムを使用し、64ビット版!
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char** argv)
{
struct stat info;
stat(argv[1], &info);
// 'st' is an acronym of 'stat'
printf("%s: size=%ld\n", argv[1], info.st_size);
}
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char** argv)
{
struct stat64 info;
stat64(argv[1], &info);
// 'st' is an acronym of 'stat'
printf("%s: size=%ld\n", argv[1], info.st_size);
}
ANSI C(標準)
の ANSI C なにかの長さのファイルです。
しての利用を見据えてプレーしました。を犯してしまいましたの求めました。
概要
例
#include <stdio.h>
int main(int argc, char** argv)
{
FILE* fp = fopen(argv[1]);
int f_size;
fseek(fp, 0, SEEK_END);
f_size = ftell(fp);
rewind(fp); // to back to start again
printf("%s: size=%ld", (unsigned long)f_size);
}
場合は、ファイル
stdin
またパイプです。 POSIXには、ANSI C います。
でも返却0
場合は、ファイルパイプstdin
.意見:のものを使用できる POSIX 標準です。では64bit対応。
やまビルのWindowsアプリの利用 GetFileSizeEx APIとしてCRTファイルI/Oがごちゃごちゃに決定ファイルの長さにより、特殊なファイルの表現の異なるシステム)
Aクイック検索にGoogleが を用いる方法fseekとftell およびスレッドこの問いに答えることではできませんでC。
を使用してくださ携帯性に図書館のような NSPR (図るとともに、Firefoxのみ)またはチェック その実装 な毛).
この設定のコードのファイルの長さです。
//opens a file with a file descriptor
FILE * i_file;
i_file = fopen(source, "r");
//gets a long from the file descriptor for fstat
long f_d = fileno(i_file);
struct stat buffer;
fstat(f_d, &buffer);
//stores file size
long file_length = buffer.st_size;
fclose(i_file);
してみてください--
fseek(fp, 0, SEEK_END);
unsigned long int file_size = ftell(fp);
rewind(fp);
何これは最初に努めてのファイルの最後に;その後、報告書のファイルポインタです。最後にこのオプション)が現在のときのファイルです。ご注意 fp
はバイナリストリームです。
file_sizeを含むバイト数のファイルが入っています。●年数に応じてclimits.h)の符号なしlong型に限定4294967295バイト(4ギガバイト)だけるのに必要な変数の型だが対応ファイルによる。
こちらはシンプルで清潔な機能ファイルのサイズを返します。.
long get_file_size(char *path)
{
FILE *fp;
long size = -1;
/* Open file for reading */
fp = fopen(path, "r");
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fp.close();
return
}
また利用する必要はあり図書館の機能を取得する内容のファイルです。Cでは完全にプラットフォーム非依存のいかめんどのプラットフォーム-経営システム開発中です!
の問題 ftell
簡単に数を取得しますバイトまでとなります。
long size ;
size = ftell(FILENAME);
printf("total size is %ld bytes",size);
でファイルを開くことができ、0の相対オフセットの下からファイル
#define SEEKBOTTOM 2
fseek(handle, 0, SEEKBOTTOM)
返される値からfseekのサイズのファイルです。
なかったコードをC長く時間ができればと思います。