でのファイル オープン モードに問題がありますfopen()
。
私の場合、カーソルを自由に探したいのですが、場合によってはそれを超えるEOF
こともあります。さらに、既存のファイルを切り捨てるのではなく、追加したいと考えています。a+
モードでファイルを開こうとしました。ただし、ファイルカーソルを自由にシークできません。を超えてカーソルをシークするたびにEOF
、新しい到着データは、指定した位置ではなく、ファイルの最後に追加されます。モードで開いた場合w+
、既存のファイルは切り捨てられます。この問題の完全な解決策はありますか?
アップデート:
明確に指定されていない点の 1 つは、ファイルが常に存在するとは限らないことです。その場合、新しいファイルを作成する必要があります。
実際、構成ファイルを処理したいのです。このように実装するのが良い習慣かどうかはわかりません。または、最初に空の構成ファイルを配置する必要があります。したがって、ファイルが存在しない場合は気にする必要はありませんか?
以下はコード スニペットです。
FILE *f = fopen(FILE_PATH, "wb+");
struct record r;
if (f) {
if (fread((void *)&r, 1, sizeof(struct record), f) {
/* File exists, do the normal flow */
} else {
if (feof(f)) {
/* File is newly created, do some initialization */
}
}
} else {
/* issue a warning */
}