我可以写入一个新文件,然后在同一个C程序中读取该文件吗?
问题描述:
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*/ }
我在做什么错?如果我写入一个尚不存在的文件,稍后有可能从该文件读取吗?我可以写入一个新文件,然后在同一个C程序中读取该文件吗?
答
你应该在rewind
或fseek
再次阅读。请不要调用变量new
(因为这是一个C++关键字)。
答
你需要做一些改变写和读模式。 fseek
是一种可能性。
在打开更新(读取+写入)的流上,调用fseek允许在读取和写入之间切换。
fsetpos
和rewind
也适用。
答
您已经以w+
模式打开文件,该文件在附加模式下可读写。在你的fprintf()命令之后,文件指针位于文件的结尾处,这意味着除EOF外没有其他东西可读。你必须fseek()
到文件中的另一个点,或者rewind()
到一开始。
答
看一看here。他们建议您检查错误errno
。您可以使用
perror("Fgets failed");
打印完整的错误消息。
问题:从写入变为读取时(总是),您需要调用fseek
。
fseek(new, 0, SEEK_SET);
倒带文件。