#include <QCoreApplication>
#include <stdio.h>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int x = 2;
FILE *fp [x];
fp[0] = fopen ("temp.txt", "w");
fp[1] = fopen ("temp.txt", "w");
if (fp[1])
qDebug () << "Fine";
fputs ("What is your name?\n", fp[0]);
fputs ("What is your name?\n", fp[0]);
fputs ("What is your name?\n", fp[0]);
fputs ("My name is XYZ.\n", fp[1]);
fputs ("What is your name?\n", fp[0]);
fputs ("What is your name?\n", fp[0]);
fclose (*fp);
return a.exec();
}
为方便起见,我使用的是Qt。
正在打印“正常”字样 该计划的输出是:
What is your name?
What is your name?
What is your name?
What is your name?
What is your name?
为什么输出中缺少My name is XYZ.
?可以做些什么来使这些文件指针在一个文件中顺序写入?
答案 0 :(得分:2)
借鉴Opening a file using fopen with same flag in C
你有两个
FILE*
对同一个文件开放,指向的开头 该文件,因此其中一个写操作会覆盖另一个。另请注意,FILE *通常是缓冲的,所以这些小字符串 当fclose()或fflush()时,实际上会写入文件 文件*。既然你什么都不做,那么系统就会这样做 应用程序退出,因此写入被覆盖取决于哪个 文件系统首先关闭。
如果你在附加模式下打开2个文件,请打开(&#34; mytext&#34;,&#34; a&#34;);,你就是这样 看到不同的结果,但是你需要fflush()FILE * 我希望确保在其他文件上运行*没有原因 交错输出。并从不同的文件写入同一个文件 进程/线程将更加谨慎,例如某种形式的文件锁定。
在您的情况下,您将关闭fp[0]
,但不关闭fp[1]
。两次写入都是独立的,可能"My name is XYZ.\n"
首先刷新到文件中(到开头),然后所有字符串"What is your name?\n"
从开头覆盖上一行就被刷新到文件中。
如何在C ++中按顺序在一个文件中写入2个文件指针?
不要使用fopen
重新打开文件并使用相同的文件描述符或使用日志实用程序函数,该函数将静态指针保存到打开的文件,或者每次登录时打开文件并在记录后关闭文件
static void log(char *line)
{
static FILE *fp = fopen("temp.txt", "w");
if(fp) fputs ("What is your name?\n", fp);
}
以及后来的main()
log("What is your name\n");
答案 1 :(得分:0)
FILE *fp [x];
fp[0] = fopen ("temp.txt", "w");
fputs ("What is your name?\n", fp[0]);
fputs ("What is your name?\n", fp[0]);
fputs ("What is your name?\n", fp[0]);
fputs ("What is your name?\n", fp[0]);
fputs ("What is your name?\n", fp[0]);
fp[1] = fopen ("temp.txt", "w");
fputs ("My name is XYZ.\n", fp[1]);
试试这样。