5

同時にディスクに書き込まれるファイルを読み込もうとしています。特定のサイズのチャンクを読み取る必要があります。読み取ったサイズが特定のサイズよりも小さい場合は、ファイルを読み取らずに (char[] の代わりに ungetc が行うことのようなもの)、再試行します。既に読み取られたバイトに追加することは、私にとってオプションではありません。

これはどのように可能ですか?

次の方法で現在の位置を保存しようとしました:

FILE *fd = fopen("test.txt","r+");
fpos_t position;
fgetpos (fd, &position);

次に、ファイルを読み取り、ポインターを fread の前の位置に戻します。

numberOfBytes = fread(buff, sizeof(unsigned char), desiredSize, fd) 
if (numberByBytes < desiredSize) {
    fsetpos (fd, &position);
}

しかし、それは機能していないようです。

4

2 に答える 2

0

fseekこれに最適なようです:

FILE *fptr = fopen("test.txt","r+");
numberOfBytes = fread(buff, 1, desiredSize, fptr)
if (numberOfBytes < desiredSize) {
    fseek(fptr, -numberOfBytes, SEEK_CUR);
}

openまた、 ではなく、ファイル記述子が返されることに注意してくださいfopen

于 2014-04-23T22:23:22.420 に答える