c - 无法在 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);
解决方案
您正在以读取模式打开文件,请参阅https://linux.die.net/man/3/fopen。
如果要写入文件,则必须以支持写入的模式打开文件,例如:fopen(ofile_name, "w")
.
如果您只想写入文件,您的主要选择是:
- “w”,如果文件不存在则创建该文件,否则会将文件截断为 0 长度(删除文件中的所有内容)并允许您写入;或者,
- “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);
}
推荐阅读
- c++ - 关于使用 || 的 if/else 代码的问题 和 &&
- r - 结合 {stringr} 和 mutate() 在大型数据集中一次操作多个列?
- java - 如何找到至少吃 P 个苹果所需的最短时间?请帮我优化这个问题的代码
- google-apps-script - 通过 AppScript 从 Google Drive 上传到 BOX
- c# - 切换分配给键的内容和分配给值的内容是否会对 KeyValuePair 集合产生影响?
- javascript - 如何重用代码并避免重复代码 Nodejs
- java - C++ 中的 Java 迭代器
- python - 更改标记大小时标记样式发生变化
- javascript - Qualtrics - 自定义 CSS 代码会破坏自定义 JS
- node.js - webpack 警告 - DefinePlugin 中的警告 'process.env.NODE_ENV' 的冲突值