我正在尝试从文件中读取一行并返回刚读取行的开头:
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上。
答案 0 :(得分:3)
您是否使用追加模式(a
或a+
)打开文件,如下面的代码所示?
fopen(fp, "a")`
Documentation表示追加模式不接受重新定位:
追加:打开文件末尾的输出文件。输出操作 总是在文件末尾写入数据,扩展它。重新定位 操作(fseek,fsetpos,rewind)被忽略。该文件已创建 如果它不存在。
如果您这样做,我建议您尝试使用阅读 - r
- 或阅读/更新 - r+
- 模式打开它,如下所示:
fopen(fp, "r")`