首页 > 其他 > 详细

C Primer Plus 第13章 文件输入/输出 复习题与编程练习

时间:2015-12-06 02:05:34      阅读:220      评论:0      收藏:0      [点我收藏+]
书中的一个例子,我也是想了半天了!!!有点难度!!!
/* 把多个文件的内容追加到一个文件中 */
#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;  // fa指向追加的目的文件, fs指向源文件
    int files = 0;  // 追加文件的个数
    char file_app[SLEN]; // 被追加文件的名称
    char file_src[SLEN]; // 源文件的名称
    puts("Enter name of destination file: ");
    gets(file_app);
    // "a":打开一个文本文件,可以写入文件,向已有文件的尾部追加内容,如果
    
// 该文件不存在则先创建之
    if((fa = fopen(file_app, "a")) == NULL)
    {
        fprintf(stderr, "Can‘t open %s\n", file_app);
        exit(2);
    }
    /*
      创建一个输出缓冲区
      NULL---函数会自动为自己分配一个缓冲区;
      BUFSIZE---其大小为1024byte;
      _IOFBF---完全缓冲(缓冲区满的时候刷新)
    
*/
    if(setvbuf(fa, NULL, _IOFBF, BUFSIZE) != 0)
    {
        fputs("Can‘t create output buffer\n", stderr);
        exit(3);
    }
    puts("Enter name of first source file (empty line to quit): ");
    while(gets(file_src) && file_src[0] != ‘\0‘)
    {
        if(strcmp(file_src, file_app) == 0)
            fputs("Can‘t append file to itself\n", stderr);
        else if((fs = fopen(file_src, "r")) == NULL)
            fprintf(stderr, "Can‘t open %s\n", file_src);
        else
        {
            /*
              创建一个输入缓冲区
              NULL---函数会自动为自己分配一个缓冲区;
              BUFSIZE---其大小为1024byte;
              _IOFBF---完全缓冲(缓冲区满的时候刷新)
            
*/
            if(setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)
            {
                fputs("Can‘t create input buffer\n", stderr);
                continue;
            }
            append(fs, fa);
            // 发生读取错误
            if(ferror(fs) != 0)
                fprintf(stderr, "Error in reading file %s.\n", file_src);
            // 发生写入错误
            if(ferror(fa) != 0)
                fprintf(stderr, "Error in writing file %s.\n", file_app);
            fclose(fs);
            files++;
            printf("File %s appended.\n", file_src);
            puts("Next file(empty line to quit): ");
        }
    }
    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);
}
我的运行结果:
bubuko.com,布布扣
bubuko.com,布布扣
确实追加成功!!!












C Primer Plus 第13章 文件输入/输出 复习题与编程练习

原文:http://www.blogjava.net/BeautifulMan/archive/2015/12/05/428533.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!