C 在附加模式下打开文件时,如何重新定位文件指针?

C 在附加模式下打开文件时,如何重新定位文件指针?,c,fopen,C,Fopen,我试图在文件中间插入一些数据。我已以附加模式打开文件,如下所示: file = fopen(msg->header.filename, "ab"); 然后,我尝试查找文件中所需的偏移量,如下所示: fseek(file, msg->header.offset, SEEK_SET); 但是,当我尝试这样写的时候: int bytesWritten = fwrite(msg->message, 1, msg->header.length, file); 所有的数据都写入

我试图在文件中间插入一些数据。我已以附加模式打开文件,如下所示:

file = fopen(msg->header.filename, "ab");
然后,我尝试查找文件中所需的偏移量,如下所示:

fseek(file, msg->header.offset, SEEK_SET);
但是,当我尝试这样写的时候:

int bytesWritten = fwrite(msg->message, 1, msg->header.length, file);

所有的数据都写入文件的末尾,而不是文件中间。


这是因为我使用的是追加模式吗?我将以写模式打开,但我需要将现有内容保留在文件中。

查看ANSI C函数fopen对“a”(附加)模式的规范: 所有写入操作都发生在文件末尾。
您的fseek将被忽略。

查看ANSI C函数fopen对“a”(附加)模式的规范: 所有写入操作都发生在文件末尾。
您的fseek将被忽略。

啊,我认为这意味着光标将从末尾开始。我没意识到它会抗拒移动。是的。如果您只想在末尾开始,则需要在更新(
rb+
)模式下打开它并调用
fseek(f,0,SEEK\u end).Ahh,我想这意味着光标将从末尾开始。我没意识到它会抗拒移动。是的。如果您只想在末尾开始,则需要在更新(
rb+
)模式下打开它并调用
fseek(f,0,SEEK\u end)