【问题标题】:When opening a file in append mode, how can I reposition the file pointer?以附加模式打开文件时,如何重新定位文件指针?
【发布时间】:2011-05-01 12:50:04
【问题描述】:

我正在尝试在文件中间插入一些数据。我以附加模式打开文件:

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

然后我尝试在文件中寻找所需的偏移量:

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

但是,当我这样尝试 fwrite 时:

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

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

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

【问题讨论】:

    标签: c fopen


    【解决方案1】:

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

    【讨论】:

    • 啊,我以为这意味着光标会从末尾开始。没想到它会抗拒移动。
    • 是的。如果你想从头开始,你需要在更新(rb+)模式下打开它并调用fseek(f, 0, SEEK_END);
    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 2012-03-17
    • 2013-08-03
    • 1970-01-01
    • 2014-12-02
    • 2012-09-19
    相关资源
    最近更新 更多