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*/ }
我做错了什么?如果我写入一个尚不存在的文件,以后是否可以从该文件中读取?
答案 0 :(得分:3)
在再次阅读之前,您应该rewind
或fseek
。请不要调用变量new
(因为那是一个C ++关键字)。
答案 1 :(得分:1)
您需要做一些事情来改变写入和读取之间的模式。 fseek
是可能的。
在打开更新的流(读取+写入)时,对fseek的调用允许在读取和写入之间切换。
fsetpos
和rewind
也适用。
答案 2 :(得分:1)
您已在w+
模式下打开文件,该模式在追加模式下是读/写。在fprintf()命令之后,文件指针位于文件的END处,这意味着除了EOF之外没有什么可读的。您必须fseek()
到文件中的另一个点,或rewind()
到开头。
答案 3 :(得分:1)
看看here。他们建议您在出错时检查errno
。你可以使用
perror("Fgets failed");
打印完整的错误消息。
解决问题:从写入更改为读取(总是)时,需要调用fseek
。
fseek(new, 0, SEEK_SET);
将文件倒回。