第 13 章 文件输入/输出 (把文件附加到另一个文件末尾)

  1 /*----------------------------------------
  2     append.c -- 把文件附加到另一个文件末尾
  3 ----------------------------------------*/
  4 
  5 #include <stdio.h>
  6 #include <stdlib.h>
  7 #include <string.h>
  8 
  9 #define BUFSIZE 4096
 10 #define SLEN 81
 11 
 12 void append(FILE *sourse, FILE *dest);
 13 char *s_gets(char *st, int n);
 14 
 15 int main()
 16 {
 17     FILE *fa, *fs;        //fa 指向目标文件,fs指向源文件
 18     int files = 0;        //附加文件的数量
 19     char file_app[SLEN];    //目标文件名
 20     char file_src[SLEN];    //源文件名
 21     int ch;
 22 
 23     puts("Enter name of destination file:");
 24     
 25     s_gets(file_app, SLEN);
 26 
 27     if ((fa = fopen(file_app, "a+")) == NULL)
 28     {
 29         fprintf(stderr, "Can't open %s\n", file_app);
 30         exit(EXIT_FAILURE);
 31     }
 32 
 33     if (setvbuf(fa, NULL, _IOFBF, BUFSIZ) != 0)
 34     {
 35         fputs("Can't create output buffer\n", stderr);
 36         exit(EXIT_FAILURE);
 37     }
 38 
 39     puts("Enter name of first source file (empty line to quit):");
 40 
 41     while (s_gets(file_src, SLEN) && file_src[0] != '\0')
 42     {
 43         if (strcmp(file_src, file_app) == 0)
 44             fputs("Can't append file to itself\n", stderr);
 45         else if ((fs = fopen(file_src, "r")) == NULL)
 46             fprintf(stderr, "Can't open %s\n", file_src);
 47         else
 48         {
 49             if (setvbuf(fs, NULL, _IOFBF, BUFSIZE) != 0)
 50             {
 51                 fputs("Can't create input buffer\n", stderr);
 52                 continue;
 53             }
 54 
 55             append(fs, fa);
 56 
 57             if (ferror(fs) != 0)
 58                 fprintf(stderr, "Error in reading file %s.\n", file_src);
 59 
 60             if (ferror(fa) != 0)
 61                 fprintf(stderr, "Error in writint file %s.\n", file_app);
 62 
 63             fclose(fs);
 64             ++files;
 65             printf("File %s appended.\n", file_src);
 66             puts("Next file (empty line to quit):");
 67         }
 68     }
 69 
 70     printf("Done appending. %d files appended.\n", files);
 71     rewind(fa);
 72     printf("%s contents:\n", file_app);
 73     while ((ch = getc(fa)) != EOF)
 74         putchar(ch);
 75     puts("Done displaying.");
 76     fclose(fa);
 77 
 78     return 0;
 79 }
 80 
 81 void append(FILE *sourse, FILE *dest)
 82 {
 83     size_t bytes;
 84     static char temp[BUFSIZ];    //只分配一次内存
 85 
 86     fwrite("\n", sizeof(char), strlen("\n") + 1, dest);
 87 
 88     while ((bytes = fread(temp, sizeof(char), BUFSIZ, sourse)) > 0)
 89         fwrite(temp, sizeof(char), bytes, dest);
 90 }
 91 
 92 char *s_gets(char *st, int n)
 93 {
 94     char *ret_val;
 95     char *find;
 96 
 97     if (ret_val = fgets(st, n, stdin));
 98     {
 99         if (find = strchr(st, '\n'))    //查找换行符
100             *find = '\0';
101         else
102             while (getchar() != '\n') continue;
103     }
104 
105     return ret_val;
106 }
append.c

猜你喜欢

转载自www.cnblogs.com/web1013/p/9171823.html