打开文件,打印到标准输出,附加到文件,然后再次打印到标准输出

时间:2015-05-01 10:27:03

标签: c

在以下C - 代码中,我打开一个名为test.txt的文件,其中包含几行代码。然后我在while循环中读取这些行并将它们打印到stdout。之后我通过例如文件进行了一些更改。将数字42附加到其中。然后我想将已更改文件的内容打印到stdout,但我似乎在那里遗漏了一些内容。到目前为止,这是我的代码(不必要地评论):

#include <stdio.h>
#include <stdlib.h> /* for exit() */

main ()
{   /* Declare variables */
    FILE *file_read;
    char file_save[100];
    int number = 42;

    /* Open file */
    file_read = fopen("/home/chb/files/Cground/test.txt", "a+");

    /* Check if file exists. */
    if (file_read == NULL) {
        fprintf(stderr, "Cannot open file\n");
        exit(1);
    }

    /* Print what is currently in the file */
    printf("This is what is currently in the file:\n");
    while(fgets(file_save, 100, file_read) != NULL) {
    printf("%s", file_save);
    }

    /* Change the contents of the file */
    fprintf(file_read, "%d\n", number);

    /* Print what is in the file after the call to fscanf() */
    printf("This is what is now in the file:\n");
    /* Missing code */
    fclose(file_read);
}

似乎放置Missing code所在的简单while循环,类似于之前使用过的循环是不够的。有人可以解释一下发生了什么。我不介意技术性问题!

2 个答案:

答案 0 :(得分:1)

您不要将文件指针设置回启动状态。因为它已经在文件的末尾,所以没有什么可读的了。 在再次阅读文件之前,请执行以下操作:

rewind(file_read); //before the "missing code" comment 

将其设置回文件的开头。

答案 1 :(得分:1)

为了再次从头开始读取文件,你必须先调用fseek(),就像这样

fseek(file_read, 0, SEEK_SET);

这会将流位置指示器设置回文件的开头。

有关详细信息,请参阅http://www.cplusplus.com/reference/cstdio/fseek/