2016-07-27 7 views
0

私はバイナリファイルの内容を毎回nバイトのグループとして読み込み、それらを文字バッファに置き、バッファ上でいくつかの操作を実行しようとしています。次の反復のために、私はファイルから次のnバイトを読み込み、ファイルの終わりまでバッファに入れなければなりません。通常のテキストファイルでgetc(fp)を使って同じことができます。しかしバイナリファイルでは、ファイルからの内容全体が読み込まれる前にgetc()がEOFで遭遇しています。私はどのようにCでバイナリファイルでそれを達成できますか?Cでのバイナリファイルの読み取り操作?

+1

CまたはC++について知りたいですか?不適切なタグを削除してください。 –

+0

Cでは、fread()関数 –

+0

を見てみると、Cでfread/fwriteを試してみることができます。C++にはifstreamがあり、第2パラメータios :: binaryがあります。 – slavanap

答えて

0

あなたは関数freadを使用して読むことができます:

まず、fopenを読み取るためのバイナリファイルを開く、使用モード"rb"

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 

は、考慮すべきfread

3

2つのことを参照してください。これはバイナリモードでファイルを開くため、特定の文字に対して特別な処理をしません。 Linuxではこれは問題ではありませんが、Windowsではそうです。

第2に、fgetcは、キャストされた文字をintに戻すことに注意してください。これにより、EOFを確認することができます。結果がEOFではない場合、文字は0から255の値になります(もちろんCHAR_BITは8です)。

+0

Cでは、charが0-255の範囲にあることが保証されています。つまり、符号なしですか? – EFenix

+1

@AntonioGarridoはい。マニュアルページから: 'fgetc()'はストリームから次の文字を読み込み、 'int 'に' unsigned char'キャスト、ファイルの最後に 'EOF'を返します。* – dbush

+2

"変換済み"、"キャスト "ではありません。 –

1

バイナリファイルでは、ファイルから読み込むプロセスは、通常、関数freadによって行われます。ファイルの最後までプロセスを反復したい場合は、このプロセスを繰り返します。あなたはwhile

while(!feof(fp)) // still not read to the end of file yet 
if (fread(buffer, sizeof(...),1,fp)==1) //put single variable to the array[] 
.... 

`

を使用することができます。

関連する問題