1

動作しているかなり大きなコマンドラインアプリの真ん中で。バッファリングできるよりも大きいファイルを処理するためにいくつかの変更を行い、から奇妙な結果が発生しましたfread

DebugLog(@"Reading %d samples of a total %d samples of size %d, leaving %d samples remaining", numSamplesToRead, numSamplesInFile, sizeof(short) * channels * scaleFactor, numSamplesRemainingInFile);
DebugLog(@"Position in file is %d", ftell(in));
items = fread(dataBuffer, sizeof(short) * channels * scaleFactor, numSamplesToRead, in);
DebugLog(@"%d samples read", items);
DebugLog(@"Position in file is %d", ftell(in));

これにより、次の出力が得られます。

<main:(604)> Reading 29278208 samples of a total 115202048 samples of size 8, leaving 85923840 samples remaining
<main:(605)> Position in file is 512
<main:(607)> 448 samples read
<main:(608)> Position in file is 58560512

(問題のファイルのサイズは225008Kです。)

では、どうすればそれぞれ8バイトの448サンプルのみを読み取り、位置512から位置58560512に移動できますか?要求された量のデータが読み取られないのはなぜですか?

4

1 に答える 1

2

の戻り値は、引数 (あなたの場合は )fread()と同じでなければなりません。とが異なるという事実は、読み取りで問題が発生したことを示していますが、ファイル ポインターが読み取られたものを超えて進んでいるため、バッファーに問題がある可能性があります。nitemsnumItemsToReaditemsnumItemsToRead

関連する情報があるかどうerrnoかを確認する必要があります。ferror()

于 2012-06-29T06:44:38.653 に答える