zoukankan      html  css  js  c++  java
  • 文件学习

     1   FILE* fp;
     2     char ch,filename[10];
     3     printf("请输入所用的文件名:");
     4     scanf("%s",filename);
     5     if((fp = fopen(filename,"w"))== NULL)
     6     {
     7         printf("无法打开此文件");
     8         exit(0);
     9     }
    10     ch = getchar();//存入scanf后的换行
    11     printf("请输入一个准备存储到磁盘的字符串(以#结束)");
    12     ch = getchar();
    13     while(ch != '#')
    14     {
    15         fputc(ch,fp);
    16         putchar(ch);
    17         ch = getchar();
    18     }
    19     fclose(fp);
    20     putchar(10);//输出一个换行符
    21     return 0;

    这是基本的文件打开与关闭,输出(fputc)得操作,自动创建文件创建在该程序源文件所在得文件夹下。因为可能打开失败,所以做一个if判断,如果失败可以及时跳出;C里面的输入要注意scanf是不吃回车的,要用getchar()吃掉

    创建的文档类型是文件,如果想要创建的文件名有.txt后缀,那么创建的就是txt,也会自动匹配已经创建的txt文档

    “w"是进行输出到文件,如果原来存在你想要输出的文件,那么,就会将原来的文件清空,再进行输出

    ”a"进行补充,在文件末尾继续输出,不会自动换行

    输出到文件的可以是中文啊(真的厉害)如下这样就输出不了中文

       char ch = '';
       printf("qq%cqq",ch);

    接下来联系一下fputc()和fgetc()

     1 void change_file(char changefilename[],char newfilename[])
     2 {
     3     FILE *fp1,*fp2;
     4     if((fp1 = fopen(changefilename,"r")) == NULL)
     5     {
     6         printf("无法打开此文件");
     7         exit(0);
     8     }
     9     if((fp2 = fopen(newfilename,"w")) == NULL)
    10     {
    11         printf("无法打开此文件");
    12         exit(0);
    13     }
    14     char ch;
    15     while(!feof(fp1))
    16     {
    17         ch = fgetc(fp1);
    18         fputc(ch,fp2);
    19         putchar(ch);
    20     }
    21     fclose(fp1);
    22     fclose(fp2);
    23 }

    feof()函数可以检查文件读写位置(文件指针的指向)是否到了末尾,是为真(1),否为假(0)

    接下来单个单个的字符拷贝太麻烦了,直接来个字符串的操作吧fgets(),fputs()

     1 void insert_stofile(char str[][10],int n,char filename[],char way[])
     2 {
     3     FILE *fp1;
     4     if((fp1 = fopen(filename,way)) == NULL)
     5     {
     6         exit(0);
     7     }
     8     for(int i = 0;i < n;i++)
     9     {
    10         fputs(str[i],fp1);
    11         fputs("
    ",fp1);
    12         puts(str[i]);
    13     }
    14 }

    fputs()向文件写入字符串时要注意应人工分开所传入的字符串,方便只读时输入到计算机

     1 void read_sfromfile(char filename[],char way[])
     2 {
     3     FILE *fp;
     4     char str[10][10];
     5     int i = 0;
     6     if((fp = fopen(filename,way)) == NULL)exit(0);
     7     while(fgets(str[i],1024,fp) != NULL)
     8     {
     9         i++;
    10     }
    11     for(int j = 0;j < i;j++)
    12     {
    13         //puts(str[j]);//自动换行了,重复换行了,因为我把换行当作了,文件中字符的分割
    14         printf("%s",str[j]);
    15     }
    16 }

    fgets()成功返回str的地址,失败返回NULL

    二进制方式的读写,常用于结构体

    fread()

     1   FILE *fp ;
     2     fp = fopen("stofilesort.txt","ab+");
     3     char str2[100];
     4     int i;
     5 //    for(i = 0; i < 2;i++)
     6 //    {
     7 //        fread(&str2[i],1,2,fp);
     8 //        printf("i = %d
    ",i);
     9 //    }
    10     fread(&str2,2,1,fp);//注意在末尾添加结束标志
    11     str2[2] = '';
    12     printf("str2 = %s
    ",str2);
    13     fclose(fp);

    fwrite()

    1  char str[][10]={"def","abc","bcd"};
    2     sort_string_xiao(str,3);
    3     FILE *fp ;
    4     fp = fopen("stofile.txt","wb+");
    5     fwrite(str,10,3,fp);//注意在末尾添加结束标志
    6     //将三维数组读入文件了
    7     fclose(fp);

    难点所在就是要注意size 与count的参数设定

    两个函数成功后都返回coount

    然后随机读写,要明白两个函数吧rewind(fp);使文件指针指向开头

    fseek(fp,位移量,起始点)以起始点为基点,前为正方向,位移,数字末尾加L

    起始点:0表示文件开头,1表示当前位置,2表示文件末尾

    然后就多打一下代码训练训练吧~~

  • 相关阅读:
    MySql 用户 及权限操作
    MAC 重置MySQL root 密码
    在mac系统安装Apache Tomcat的详细步骤[转]
    Maven:mirror和repository 区别
    ES6 入门系列
    转场动画CALayer (Transition)
    OC 异常处理
    Foundation 框架
    Enum枚举
    Invalid App Store Icon. The App Store Icon in the asset catalog in 'xxx.app' can’t be transparent nor contain an alpha channel.
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/8193693.html
Copyright © 2011-2022 走看看