想要添加三个不同的文件到一个文件中去,应该怎么修改
/*步骤(1)请求一个目的的文件名,并打开该文件(2)使用一个循环请求源文件(3)依次以读取模式打开每个源文件,并且将内容追加到目的文件(3)已追加模式打开最后一个命令行文件(如果不能打开就退出(4)为这个文件建立一个1024字节的缓冲区如果不能完成就退出(5)如果该文件和目的文件相同,就跳到下一个文件(6)如果不能以读取模式打开文件,就跳到下一个文件把该文件的内容添加到目的文件中去*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define BUFSIZE 1024
#define SLEN 81
void append(FILE *source, FILE *dest);
int main(void)
{
FILE *fa, *fs;
int files = 0;//追加文件的个数
char file_respect[SLEN];//被追加文件的名称
char file_vista[SLEN];
printf("Enter name of destination file:");
fgets(file_respect, SLEN, stdin);
errno_t err;
err = fopen_s(&fa, "room.txt", "a");//"a"表示打开一个文本文件,可以写入文件,向已有的文件尾部追加文件,文件不存在就先创建之
if (fa == 0)
{
fprintf(stderr, "can not open %s\n", file_respect);
exit(2);
}
if (setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)//自动分配1024字节的缓冲区
{
fputs("can not create output buffer\n", stderr);
exit(3);
}
printf("enter name of first source file(empty line to quit):");
while (fgets(file_vista, SLEN, stdin) && file_vista[0] != '*')
{
fs = _fsopen("file_vista", "r", _SH_DENYWR);
if (strcmp(file_respect, file_vista) == 0)//判断两个文件是否相同
fputs("can not append file to itself\n", stderr);
else if (fs == 0)
fprintf(stderr, "can not open %s\n", file_vista);
else
{
if (setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)//自动分配1024字节的缓冲区
{
fputs("can not create input buffer\n", stderr);
continue;
}
append(fs, fa);
if (ferror(fs) != 0)
fprintf(stderr, "error in reading file%s.\n", file_vista);
if (ferror(fa) != 0)
fprintf(stderr, "error in writing file %s.\n", file_respect);
fclose(fs);
files++;
printf("file %s appended,\n", file_vista);
puts("next file (empty line to quite):");
}
}
printf("done.%d files appended,\n", files);
fclose(fa);
return 0;
}
void append(FILE *source, FILE *dest)
{
size_t bytes;
static char temp[BUFSIZE];
while ((bytes = fread(temp, sizeof(char), BUFSIZE, source)) > 0)
fwrite(temp, sizeof(char), bytes, dest);
}