C语言文件知识——合并文件(源码可运行)

需求
实现文本文件合并程序,在命令行界面输入多个文件名,然后把后面的所有文件合并到第一个文件的程序

以下做的是四个文件的拷贝,如果有更多文件可以用一下copyFile()函数copy

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void copyFile(FILE *p1,FILE *p2)
{
	fseek(p1,0L,SEEK_END);
	char ch=fgetc(p2);
	while(ch!=EOF)
	{
		fprintf(p1,"%c",ch);	
		ch=fgetc(p2);
	}
}
int main()
{
//借鉴文件copy
//利用while将后面的文件拼接到a.txt后

FILE *fp1,*fp2,*fp3,*fp4;
char fileName1[20],fileName2[20],fileName3[20],fileName4[20];
printf("请输入要合并的文件名:\n");
scanf("%s",fileName1);
scanf("%s",fileName2);
scanf("%s",fileName3);
scanf("%s",fileName4);
printf("您好,以上所有的文件将被合并到%s中",fileName1);
fp1=fopen(fileName1,"rt+");
fp2=fopen(fileName2,"r");
fp3=fopen(fileName3,"r");
fp4=fopen(fileName4,"r");

if((fp1= =NULL)||(fp2= =NULL)||(fp3= =NULL)||(fp4==NULL))
{ 
	printf("can not open files correctly\n");
	return 0;
}

else
{
	copyFile(fp1,fp2);
	copyFile(fp1,fp3);
	copyFile(fp1,fp4);	
	
}
	return 0;    
}

运行界面
在这里插入图片描述
编写过程遇到的问题
1.命令行界面:黑底白字的窗口
2.用函数真的比一个一个写方便,要有函数封装的意识
3.NULL/EOF都是在stdio.h中的,若拼写错误(如Null)提示:
Eorror:‘Null’was not declared in this scope
4.Eorror:Id returned 1 exit status,因为运行窗口未关闭就又开了一个
5.fseek函数相当于一个文件中指针的定位函数
6.刚开始时做的fseek发现a中的数据总是被覆盖而不显示,但是b、c、d中的数据都可以成功依次拼接。这就是说是a这个文件的问题,找了找发现打开方式是只“w”,改成可读可写“rt+”就可了

后记
讲真,这正好入学一年了,包括上学期的C和这学期的数据结构,这是我第一次完全自己写的作业,之前几乎都是copy copy再copy。
不知道在瞎忙什么,总是想吸收更多的知识而脱离了实践,所以知识也忘得快。
作业要认真做,做的过程中会收获很多,很多新旧知识都是在实际编写代码时候巩固甚至重新学习的。
做出来收获感真挺强的,即使是一个不难的小程序,一段不长的小代码

猜你喜欢

转载自blog.csdn.net/qq_45832958/article/details/107061706