例の記述の要求への応答-固定サイズのレコードを想定:
enum { RECSIZE = 256 };
char buffer[RECSIZE];
FILE *fp = ...; // File to read from and write to
int recnum = 37; // Counting from record 0
long offset = recnum * RECSIZE;
if (fseek(fp, offset, SEEK_SET) != 0)
...error...
if (fread(buffer, sizeof(buffer), 1, fp) != 1)
...error...
...modify buffer...
if (fseek(fp, offset, SEEK_SET) != 0)
...error...
if (fwrite(buffer, sizeof(buffer), 1, fp) != 1)
...error...
recnum
変更する必要のあるレコードごとに、の宣言から最後までコードを1回繰り返します(ループを考えてください)。
編集時にサイズが変化する可変サイズのレコードでは、かなりの労力を費やす必要があります。そのため、古いファイルを一度に1レコードずつメモリにコピーし、レコードを適切に変更してから、レコードを新しいファイルに変更しました。