繁体   English   中英

使用fseek导致我的filepointer跳转到EOF

[英]Using fseek resulting in my filepointer jumping towards 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,因为我调试并看到了值。

我在Windows 10上。

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

fopen(fp, "a")`

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

append :打开文件末尾的输出文件。 输出操作总是在文件末尾写入数据,并将其扩展。 重新定位操作(fseek,fsetpos,rewind)将被忽略。 如果文件不存在,则创建该文件。

如果您这样做,我建议您尝试使用read- r - 或read / update - r+ - 模式打开它,如下所示:

fopen(fp, "r")`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM