首页 > 解决方案 > 无法在 C 程序中写入文件

问题描述

我正在尝试将我的结果写入输出文件,在 Mac 终端上运行这个 C 程序。我已经通过直接写入终端来检查程序的所有部分是否正常工作,但是当我尝试写入文件时,什么也没有发生。

“写入文件”行在每次迭代时都会写入,但是 outputdata.txt 文件没有任何反应。

我已经更改了权限,我可以直接从终端写入这个文件。但是,使用下面的代码它不起作用。

#define OUTPUTFILE "outputdata.txt"

FILE *ofp;

char ofile_name[50] = OUTPUTFILE;

ofp = fopen(ofile_name, "r");

for (p = 1; p <= NumPattern ; p++) {
    for (k = 1 ; k <= numnodes_out ; k++) {
        fprintf(ofp, "%f\n", output_nodes[p][k]);
        fprintf(stdout, "Writing to file\n");
    }
}
fclose(ofp);

标签: c

解决方案


您正在以读取模式打开文件,请参阅https://linux.die.net/man/3/fopen

如果要写入文件,则必须以支持写入的模式打开文件,例如:fopen(ofile_name, "w").

如果您只想写入文件,您的主要选择是:

  1. “w”,如果文件不存在则创建该文件,否则会将文件截断为 0 长度(删除文件中的所有内容)并允许您写入;或者,
  2. “a”,它将附加到现有文件的末尾。

此外,如果您查看前面提到的链接,您应该注意,如果文件未成功打开,该函数可能会返回 null。因此,您应该在对其进行操作之前检查 fopen 返回的 FILE* 是否不为空。

#define OUTPUTFILE "outputdata.txt"

FILE *ofp;

char ofile_name[50] = OUTPUTFILE;

ofp = fopen(ofile_name, "r");

if (ofp) { // NOTE: added NULL check.
    for (p = 1; p <= NumPattern ; p++) {
        for (k = 1 ; k <= numnodes_out ; k++) {
            fprintf(ofp, "%f\n", output_nodes[p][k]);
            fprintf(stdout, "Writing to file\n");
        }
    }
    fclose(ofp);
}

推荐阅读