1. 文件的分类
      1. ASCLL 文件(文本文件),每个字节放一个字符的 ASCLL 代码
      2. 二进制文件
    2. 文件缓冲区,不管是从内存到磁盘,还是从磁盘到内存,到需要让数据先传输并停留在这二者之间的缓冲区中。缓冲区的作用是减少对磁盘的访问频率,因为 IO 操作的速度相比于 CPU 的速度是很慢的(大概几十微秒)
    3. 文件的打开
      1. fopen 函数,其中第二个参数是打开方式,详见参考书目(注意,只有 w 是在文件不存在时新建文件)
      2. 不能打开则返回空指针,能打开则返回该文件被调入内存中的地址(指针)
    4. 文件的关闭
      1. fclose 用于文件的关闭,其步骤是,将缓冲区的内容全部送入磁盘,然后撤销文件信息区和缓冲区
      2. 成功则返回 0,否则返回 EOF
    5. 文件的读写(2,3)

    image.png
    image.png

    1. // 1
    2. #include <stdio.h>
    3. int main()
    4. {
    5. FILE *fp;
    6. fp = fopen("filedemo02.txt","w");
    7. if(fp!=NULL)
    8. printf("打开成功!");
    9. fclose(fp);
    10. return 0;
    11. }
    12. // 2 读写一个字符实例
    13. #include <stdio.h>
    14. int main()
    15. {
    16. FILE *fp,*fp2;
    17. fp = fopen("filedemo02.txt","w");
    18. fp2 = fopen("filedemo02.txt","r+");
    19. if(fp!=NULL)
    20. printf("打开成功!\n");
    21. // 写一个字符
    22. char wreturn = fputc('c',fp);
    23. printf("写入的字符:%c\n",wreturn);
    24. // 写完后要马上关闭
    25. fclose(fp);
    26. // 读一个字符
    27. char rreturn = fgetc(fp2);
    28. if(rreturn != EOF)
    29. printf("读入的字符:%c\n",rreturn);
    30. else
    31. printf("读取失败");
    32. fclose(fp2);
    33. return 0;
    34. }
    35. // 3 读一个字符串
    36. #include <stdio.h>
    37. int main()
    38. {
    39. int i=0;
    40. FILE *fp;
    41. fp = fopen("filedemo02.txt","r");
    42. char string[100];
    43. fgets(string,100,fp);
    44. while(string[i]!='#')
    45. printf("%c",string[i++]);
    46. return 0;
    47. }
    48. // 3 写一个字符串
    49. #include <stdio.h>
    50. int main()
    51. {
    52. int i=0;
    53. FILE *fp;
    54. fp = fopen("filedemo02.txt","w");
    55. char *string = "这是一个字符串";
    56. fputs(string,fp);
    57. return 0;
    58. }

    【注】fopen(“c:\project\test1.dat”,”r”),这样的写法是错误的,因为会把 \t 看作一个被转义的字符,所以我们应该这么去书写 fopen(“c:\project\test1.dat”,”r”)