使用fseek导致我的文件指针跳转到EOF



我试图从文件中读取一行并返回到刚读取行的开头:

FILE *fp = fopen("C:\F2BJROP1.phn", "r+");
while(1){
    /**Data reading**/
    fscanf(fp, "%f", &temp1);
    if(feof(fp))
        break;
    if(isvoiced(temp1)==1){ /** isvoiced() has nothing to do with this fp. **/
        pos = ftell(fp);
        voicedIntervs[k++] = temp1;
        fscanf(fp, "%f", &temp1);
        voicedIntervs[k++] = temp1;
        fseek(fp, pos, SEEK_SET); /** Trying to go back to pos **/
    }
}

但是就在fseek之后,我观察到fp向EOF跳跃。我希望我的fp回到存储在pos中的位置。在程序的任何地方都没有声明其他fp。

我知道fp达到了EOF,因为我调试并看到了这个值。

是否使用追加模式(aa+)打开文件,如下面的代码所示?

fopen(fp, "a")`

文档声明追加模式不接受重新定位:

append:在文件末尾打开文件输出。输出操作始终在文件末尾写入数据,展开它。重新定位操作(fseek, fsetpos, rewind)被忽略。文件创建完成如果不存在

如果您这样做了,我建议您尝试以read - r -或read/update - r+ -模式打开它,如:

fopen(fp, "r")`

相关内容

  • 没有找到相关文章

最新更新