第 13 章 文件输入/输出 (把文件附加到另一个文…
2018-06-18 03:45:46来源:未知 阅读 ()
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 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- QT5 解析JSON文件 2020-06-09
- QTableView与Excel之间的文件打开与保存 2020-05-26
- 第七章 1.输入输出与模板 2020-04-04
- C++ 文件输入输出 2020-03-27
- [C++]HelloWorld背后的故事!总结一下在我们运行exe可执行文 2020-03-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash