2010-10-27 44 views
1

我想將一些數據插入到文件的中間。我在追加模式打開的文件爲:以追加模式打開文件時,如何重新定位文件指針?

file = fopen(msg->header.filename, "ab"); 

然後我嘗試了尋求到文件,以便在所需的偏移:

fseek(file, msg->header.offset, SEEK_SET); 

然而,當我再嘗試一個FWRITE像這樣:

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

將所有數據寫入文件的末尾而不是在文件的中間。

這是因爲我使用追加模式?我會以寫入模式打開,但我需要保留文件中的現有內容。

回答

6

看ANSI C功能打開爲「A」(附加)模式的規範: 所有寫操作發生在文件末尾。 你的fseek將被忽略。

+0

啊,我認爲這意味着光標會在最後開始。沒有意識到它會抵制移動。 – samoz 2010-10-27 20:14:05

+3

是的。如果你只想在最後開始,你需要在update('rb +')模式下打開它並調用'fseek(f,0,SEEK_END);'。 – 2010-10-27 20:52:16