读书人

怎么解决这个文件的重复追加有关问题

发布时间: 2013-06-25 23:45:41 作者: rapoo

如何解决这个文件的重复追加问题?
下面的这个程序是我想将文件456的内容追加到123里面去,但是每编译一次就追加一次,不是我要的目的,我只想它追加一次就行了,怎样解决呢?

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

int main(void)
{
FILE *in ,*out;
char str[100];

in = fopen("f:\\123.txt", "a");
out = fopen("f:\\456.txt", "r");
if(in == NULL)
{
printf("Error in opening the file.\n");
exit(1);
}
fprintf(in, "%s", "\n");

if(out == NULL)
{
printf("Can not open the file.\n");
}
while(fgets(str, 100, out) != NULL)
{
fprintf(in, "%s", str);
}
fclose(out);
fclose(in);

in = fopen("f:\\123.txt", "r");
while(fgets(str, 100, in) != NULL)
{
fputs(str, stdout);
}
fclose(in);

return 0;
}

[解决办法]
你不要往123里面回写,内容读出来,写到另外一个文件里面去不行吗?

[解决办法]
在每次追加之前先查看 一个标志文件是否存在,
如果不存在就认为是第一次追加数据,追加完成之后 写完成的标志文件,
如果标志文件存在就认为已经追加过了,什么都不处理
[解决办法]
引用:
nanjun520,我没明白您的意思,能不能在我的程序上改动一下?

他的意思是你的程序在完全正确的情况下,确实是没编译一次就添加一次。所以你的123.txt中会有很多重复的456.txt中的内容(运行了几次就有几次)。在这种情况下你的程序也正确。
假如你希望123.txt中没有重复的456中的内容的话,使用一个判断语句,检查是否已经有了,有的话不做任何动作,否则添加即可。
[解决办法]
程序编译不会影响除源代码和过程文件之外的任何东西
首先楼主先弄明白,编译和运行是两个不同的名词

然后,每次程序启动的时候做什么,和之前运行过多少次没有任何关系
如果想要有关系,就额外设一个文件或者注册表项等等,用来保存程序运行过多少次
[解决办法]
编译怎么会把内容追加到文件里???

你是说每运行一次就会把内容追加到文件里吧?
这个程序实现的目的不就是把内容追加到文件里,然后输出文件的内容么?
每运行一次程序,程序当然要忠实地按你编写的要求来做啊。
你在程序里又没有告诉它如果已经追加过,就不要再追加了,直接输出。

不知道你是不是这个意思~~~~
[解决办法]
好吧,我以为我说清楚了,那么给你一段完整的代码。
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main(void)
{
FILE *in ,*out,*mark=NULL;
//////////////////////////
////////假设你第一次合并文件的时候这个标志文件不存在,
////////这个标志文件只是为了用来判断,如果你想再次合并文件,只需要删除这个标志文件
////////一样的道理如果你不想合并文件,你可以手动创建这个标志文件。
////////只要这个标志文件存在,就假设你已经合并过123.txt和456.txt
mark=fopen("f:\\make.txt", "r");
if(mark)
{
printf("Additional file have already done.\n");
exit(1);
}
//////////////////////////////
char str[100];
in = fopen("f:\\123.txt", "a");
out = fopen("f:\\456.txt", "r");
if(in == NULL)


{
printf("Error in opening the file.\n");
exit(1);
}
fprintf(in, "%s", "\n");
if(out == NULL)
{
printf("Can not open the file.\n");
}
while(fgets(str, 100, out) != NULL)
{
fprintf(in, "%s", str);
}
fclose(out);
fclose(in);
in = fopen("f:\\123.txt", "r");
while(fgets(str, 100, in) != NULL)
{
fputs(str, stdout);
}
fclose(in);
//////////////////////////////
////////////合并完成,马上创建标志文件
mark=fopen("f:\\make.txt", "w");
if(mark == NULL)
{
printf("Failed to create file.\n");
}
fclose(mark);
///////////////////////////
return 0;
}

读书人网 >C语言

热点推荐