C中的文件操作函数
2016年01月14日 00:56:49 C/C++ ⁄ 共 4153字 暂无评论 ⁄ 被围观 3,029次

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "constant.h"
  4. /* fputc()和fgetc(),用来读写一个字符,读写对象为文件,同putc()和getc()。putchar()和getchar()读写一个字符,读写对象问终端。 
  5.  * fread()和fwrite(),用来读写一个数据块,读写对象为文件。 
  6.  * fprintf()和fscanf()读写对象是磁盘文件,而printf()和scanf()读写对象是终端。在内存与磁盘频繁交换数据时,最好别用,而用fread、fwrite代替。 
  7.  * fgets()和fputs(),用来读写字符串,读写对象为文件。
  8.  * rewind()使得位置指针重新返回文件开头。
  9.  * fseek()可以指定位置读写,即实现随机读写。
  10.  * ftell()得到流式文件中指针的当前位置。
  11.  * feof(),若到文件末尾,函数值为真(非0)。
  12.  * ferror(),若对文件操作出错,函数值为真(非0)。
  13.  * clearerr(),使得feof()和ferror()的值为0。 
  14.  */
  15. int main(int argc, char *argv[]) {
  16.     FILE *fp;//文件指针 
  17.     char patha[50] = "F:/c/demo/file/";//路径固定部分 
  18.     //printf("%s",strcat(path,"a.txt"));//字符串链接函数测试,必须使得第一个字符串的长度足够大,否则有可能报错。
  19.     //printf("%s",F("a.txt"));//用宏定义表示文件路径 
  20.     //下面两种表示文件路径的方式在Windows系统中都可以,不过最好还是用/来表示路径。 
  21.     //原因就是Linux系统中路径表示为/,都用/,代码的移植性更好。 
  22.     //fp = fopen("F:\\c\\demo\\file\\a.txt", "r");
  23.     //fp = fopen("F:/c/demo/file/a.txt", "r");
  24.     // 文件的打开和关闭
  25.     char file_a[] = "a.txt";
  26.     if ((fp = fopen(strcat(patha, file_a), "r")) == NULL) {
  27.         printf("cannot open %s file.\n", file_a);
  28.     } else {
  29.         printf("already open %s file.\n", file_a);
  30.         printf("the content of file %s is :\n", file_a);
  31.         //feof()为判断文件是否真的结束,既可以判断文本文件,也可以判断二进制文件。
  32.         //判断文本文件,也可以用ch!=EOF来判断,但二进制文件则不行。 
  33.         char ch;
  34.         while (!feof(fp)) {
  35.             ch = fgetc(fp);
  36.             putchar(ch);
  37.         }
  38.         printf("\nnow close %s file ...\n", file_a);
  39.         //顺利的执行了关闭操作,则返回值为0,否则返回EOF(-1) 
  40.         if (fclose(fp) == 0) {//fclose(fp) != EOF
  41.             printf("close file %s successfully.\n\n", file_a);
  42.         } else {
  43.             printf("close file %s failed.\n\n", file_a);
  44.         }
  45.     }
  46.     // 文件的读写
  47.     char file_b[] = "b.txt";
  48.     int i;
  49.     char t;
  50.     // C语言中没有专门的字符串变量,下面三种定义字符数组的方式都可以保存字符串。 
  51.     //char tc[] = {'w','w','w','.','m','e','n','g','l','a','n','g','l','a','n','g','.','c','o','m'};//长度20 
  52.     char tc[] = {"www.menglanglang.cn"};//长度21
  53.     //char tc[] = "www.menglanglang.cn";//长度21
  54.     //以追加的方式打开文件。不过书上说必须存在该文件才能打开,但这里做实验,不存在也可以创建的。
  55.     //而r方式文件必须存在才能打开,w方式会先创建,奇怪的就是a方式,也许是编译器不一样吧。 
  56.     if ((fp = fopen(F("b.txt"), "a")) == NULL) {
  57.         printf("cannot open %s file.\n", file_b);
  58.     } else {
  59.         printf("already open %s file.\n", file_b);
  60.         //printf("============%d",strlen(tc));//三种定义方式的长度都为20,看来strlen()把末尾的'\0'空操作字符已不算在长度内了 
  61.         for (i = 0; i < strlen(tc); i++) {
  62.             if ((t = fputc(tc[i], fp)) != EOF) {
  63.                 printf("Characters %c written to file %s successfully.\n", t, file_b);
  64.             } else {
  65.                 printf("Characters %c written to file %s failed.\n", t, file_b);
  66.             }
  67.         }
  68.         if (fclose(fp) == 0) {//fclose(fp) != EOF
  69.             printf("close file %s successfully.\n\n", file_b);
  70.         } else {
  71.             printf("close file %s failed.\n\n", file_b);
  72.         }
  73.     }
  74. //  save();
  75.     copy();
  76.     return 0;
  77. }

constant.h

  1. #define PATH "F:/c/demo/file/"
  2. #define F(fnm) PATH fnm

save.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /**
  4.  * 在键盘上输入字符,并把这些输入保存到磁盘指定的文件中,输入#表示结束 
  5.  */
  6. void save() {
  7.     FILE *fp;
  8.     char ch;
  9.     char path[50] = "F:/c/demo/file/";
  10.     char filename[10];
  11.     printf("Please input file name : ");
  12.     scanf("%s", filename);
  13.     if ((fp = fopen(strcat(path, filename), "w")) == NULL) {
  14.         printf("cannot open file.\n");
  15.         exit(0);
  16.     }
  17.     ch = getchar();
  18.     ch = getchar();
  19.     while (ch != '#') {
  20.         fputc(ch, fp);
  21.         putchar(ch);
  22.         ch = getchar();
  23.     }
  24.     putchar(10);
  25.     fclose(fp);
  26. }

copy.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /**
  4.  * 文件的复制 
  5.  */
  6. void copy() {
  7.     FILE *in, *out;
  8.     char ch, infilename[10], outfilename[10];
  9.     char path1[50] = "F:/c/demo/file/";
  10.     char path2[50] = "F:/c/demo/file/";
  11.     printf("Enter the infile name : ");
  12.     scanf("%s", infilename);
  13.     printf("Enter the outfile name : ");
  14.     scanf("%s", outfilename);
  15.     if ((in = fopen(strcat(path1, infilename), "r")) == NULL) {
  16.         printf("cannot open infile %s", infilename);
  17.         exit(0);
  18.     }
  19.     if ((out = fopen(strcat(path2, outfilename), "w")) == NULL) {
  20.         printf("cannot open outfile %s", outfilename);
  21.         exit(0);
  22.     }
  23.     while (!feof(in)) {
  24.         fputc(fgetc(in), out);
  25.     }
  26.     fclose(in);
  27.     fclose(out);
  28. }

给我留言

留言无头像?