我可以写入新文件,然后在同一个C程序中从该文件中读取吗?

时间:2011-11-17 20:13:37

标签: c file-io

FILE *new = fopen("new.out", "w+"); // creates a new file that didnt exist before
char finput[50];

fprintf(new, "hello\nworld\n");

while(fgets(finput, 51, new) != NULL)
{ /*never reaches this point*/ }

我做错了什么?如果我写入一个尚不存在的文件,以后是否可以从该文件中读取?

4 个答案:

答案 0 :(得分:3)

在再次阅读之前,您应该rewindfseek。请不要调用变量new(因为那是一个C ++关键字)。

答案 1 :(得分:1)

您需要做一些事情来改变写入和读取之间的模式。 fseek是可能的。

  

在打开更新的流(读取+写入)时,对fseek的调用允许在读取和写入之间切换。

fsetposrewind也适用。

答案 2 :(得分:1)

您已在w+模式下打开文件,该模式在追加模式下是读/写。在fprintf()命令之后,文件指针位于文件的END处,这意味着除了EOF之外没有什么可读的。您必须fseek()到文件中的另一个点,或rewind()到开头。

答案 3 :(得分:1)

看看here。他们建议您在出错时检查errno。你可以使用

perror("Fgets failed");

打印完整的错误消息。

解决问题:从写入更改为读取(总是)时,需要调用fseek

fseek(new, 0, SEEK_SET);

将文件倒回。