C程序没有写入文本文件

时间:2015-11-17 18:02:30

标签: c text-files

所以这就是问题所在:

我想在文本文件中写一些文字,但我遇到了一些奇怪的情况:

样本1:

int main()
{
    FILE *file = fopen("structures.txt", "a+"); // open the file for reading & writing
    int choice = 0;

    if(file == NULL)
        puts("Unable to open text file");
    else { 
        do {
            scanf("%d", &choice);
            fprintf(file, "This is testing for fprintf...\n");
        }while(choice > 0);
    }
    fclose(file);

    return 0;
}

在这个版本的程序中,没有任何东西被写入文本文件&我不明白为什么。但对我来说最奇怪的事情是:

样本2:

int main()
{
    FILE *file = fopen("structures.txt", "a+"); // open the file for reading & writing
    int choice = 0;

    if(file == NULL)
        puts("Unable to open text file");
    else { 
        do {
            scanf("%d", &choice);
            fprintf(file, "This is testing for fprintf...\n");
            fclose(file); // Added this line, the writing works
        }while(choice > 0);
    }
    fclose(file);

    return 0;
}

fclose(file);调用后直接添加fprintf后,程序成功写入:

  

这是测试fprintf ...

到文本文件。

我的问题是:

  • 这是否意味着我必须随时打开我的文本文件 写一些文字给它&之后直接关闭它?

  • fclose()是否与撰写流程有关?

  • 阻止fprintf()工作的因素有哪些? (第1个样本)

  • 我怎样才能打开&在节目开始时关闭文本文件ONCE,&在它的最后(分别)保证我的程序将完美地工作?

2 个答案:

答案 0 :(得分:2)

  

这是否意味着每当我想给它写一些文字时我都要打开我的文本文件&之后直接关闭它?

不,但这可能意味着您需要在您编写的内容实际刷新并写入文件之前关闭文件。

  

fclose()与写作过程有什么关系吗?

大多数文件流都是缓冲的。意味着每次写入都会进入内存。在缓冲区已满或您调用close之前,它不会写入磁盘。

  

阻止fprintf()工作的因素是什么? (第1个样本)

你得到的任何重大错误。

  

我怎样才能打开&在节目开始时关闭文本文件ONCE,&在它的最后(分别)保证我的程序将完美地工作?

您可以拨打fflush()之类的内容。但是你确定你试过这个,即使你最后关闭文件后文件也没有包含任何内容吗?

答案 1 :(得分:1)

我使用int fflush (FILE *stream)(@Jonathan暗示)解决了这个问题。

  

刷新缓冲流上的输出意味着全部传输   累积的字符到文件。有很多情况的时候   流上的缓冲输出会自动刷新:

     

当您尝试输出并且输出缓冲区已满时。

     

关闭流时

     

当程序通过调用exit终止时。

     

写入换行符时,如果流是行缓冲的。

     

任何流上的输入操作实际上都会从其文件中读取数据。

基本上,我只需在致电fflush()后致电fprintf()

fprintf(file, "This is testing for fprintf...\n");
fflush(file);