「a+b」モードを使用してファイルを開きたいです。つまり、存在しない場合は自動的に作成されますが、存在する場合は上書きしたくありません。ファイルを読み書きできるようにしたい。
ファイルはバイナリであり、特定のレコードを保存したいと考えてstruct
います。だから私は欲しいfseek()
レコードにやりたいと思って、それを使ってレコードを保存しfwrite()
ます。
コードは次のようになります (MyRecord
は aにtypedef
、struct
はファイル名に):FILENAME
#define
int saveRecord(MyRecord *pRecord, int pos)
{
FILE* file = fopen(FILENAME, "a+b");
if (file == NULL)
{
printf("Unable to open file %s\n", FILENAME);
return 0;
}
fseek(file, pos * sizeof(MyRecord), SEEK_SET);
fwrite(pRecord, sizeof(MyRecord), 1, file);
fclose(file);
return 1;
}
ただし、このコードは、0 に設定した場合でも、レコードをファイルの最後に追加するだけです。追加モード で動作しpos
ないのはなぜですか?fseek()
SEEK_SET
「r + b」で簡単に開くことができ、失敗した場合は「wb」で開くことができることはわかっていますが、これが機能しない理由fseek()
とSEEK_SET
、最後にファイルポインターが残っている理由を知りたいです。この動作が文書化されている場所への参照は大歓迎です (何も見つからなかったか、間違ったキーワードを使用しているため)。