ファイルをサイズがBLOCK_SIZE
(現在は1000 unsigned chars
)のブロックに読み込もうとしています。私のコードは、ファイル全体(通常は2〜4)を読み込むために読み込まなければならないブロックの数を最初に見つけ、その後ファイルを読むforループを繰り返します(後で "+17+filenamesize
"のものを無視しますプログラムで。fread()とfseek()を使用しているCのファイルの一部を読み取る
はしかし、初回のみ、j=1
に、それは実際にbuf
配列にデータを入れるん。他のケースでは、ときj != 1
、strlen(buf)
戻り。
私はこの問題を考えますファイルを読み取る前にファイルの2番目の部分を探すためにfseek()
を使用するか、またはメモリ割り当ての問題です。
1000-1999
thの文字をbuf
アレイに読み込むことについて助けがあれば、どんな助力もあります。
unsigned char *buf;
source = fopen(localpath,"r");
temp = filesize/BLOCK_SIZE + 1;
for (j=1; j <= temp; j++) {
if (j == 1) {
buf = (unsigned char *) malloc((sizeof(unsigned char)) * (BLOCK_SIZE + 17 + filenamesize));
fread(buf+17+filenamesize, sizeof(unsigned char), BLOCK_SIZE, source);
} else if (j == temp) {
buf = (unsigned char *) malloc((sizeof(unsigned char)) * (filesize + 5 - BLOCK_SIZE*(j-1)));
fseek(source, BLOCK_SIZE*(j-1), SEEK_SET); // off by one warning
fread(buf+5, sizeof(unsigned char), filesize - BLOCK_SIZE*(j-1), source);
} else {
buf = (unsigned char *) malloc((sizeof(unsigned char)) * (5+BLOCK_SIZE*(j-1)));
fseek(source, BLOCK_SIZE*(j-1), SEEK_SET); // off by one warning
fread(buf+5, sizeof(unsigned char), BLOCK_SIZE, source);
}
// do stuff with buf here
buf = "";
free(buf);
}
ファイルはバイナリかASCIIか。 – EFraim
ところで、実際にはfseekを使う理由は何ですか?あなたの現在のコードは、すべてのfseekを完全に熟練し、より幸せに生きることができます。 – EFraim
ファイルはASCIIです。あなたは正しい、私はおそらくfseekを使用する必要はありません。 freadは読み込みを中断した場所のファイルポインタをそのまま残します。 –