标题:想要添加三个不同的文件到一个文件中去,应该怎么修改
只看楼主
songofsin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-9-30
 问题点数:0 回复次数:0 
想要添加三个不同的文件到一个文件中去,应该怎么修改
/*步骤(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);
}
搜索更多相关主题的帖子: 源文件 缓冲区 include 
2016-09-30 09:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-469345-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.277131 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved