zoukankan      html  css  js  c++  java
  • 文件

      1 /*
      2 复习  结构体联合枚举
      3     struct   union enum
      4 
      5 
      6 新内容 文件操作
      7 
      8 1. 文件操作的作用 目前数据存在内存  只要程序退出 这些内存都会回收  数据会丢失
      9       如果想要存放这些在内存中的数据  需要用到文件操作
     10       如果想要得到某个文件的内容  也需要文件操作
     11 
     12       读档  存档
     13 2. 课前准备  路径写法
     14 
     15    绝对路径   从磁盘名开始   比如 C:UsersAdministratorDesktopXX.xls
     16    相对路径     从项目文件夹开始的   ./123.txt   ../表示上层目录  /用来分割多层目录
     17 
     18         相对路径比较常用   \ 
     19         字符串中\ 表示一个的意思      代码中的所有路径 隔开就用\或者/
     20 
     21     PS.  二进制文件  用计算机的方式存放的文件 mp3 wav word
     22                 用txt打开  看里面的内容有没有乱码
     23 
     24         文本 记事本打开不会乱码的文件   txt .c  .cpp
     25 
     26 
     27 
     28 3. 文件指针和文件操作的函数
     29     
     30     FILE*  fp;//先要定义文件指针 
     31     1.打开和关闭文件 fopen fclose
     32 
     33     2. 文件读写的函数
     34         文本文件   每次单独读取一个字符的内容  fgetc fputc
     35             fgetc 每次从文件中读取一个字符
     36             fputc 把一个字符写入到文件当中
     37 
     38 
     39             fgets  fputs    字符串方式进行读写
     40 
     41             fscanf    fprintf 格式化读取
     42 
     43             fprintf(fp,"格式占位符",数据);
     44 
     45             fread  fwrite(二进制文件的读写方式)
     46 
     47 
     48 
     49 
     50         一般文件的读写会不会同时进行
     51             玩游戏 游戏开始之前 读档 --->读文件
     52                 游戏结束的时候   存档--->写入文件
     53 
     54     
     55 
     56     f  function  函数的意思
     57     fgetc   get 得到  char  读取文件中一个字符
     58     fputc   put 放置  char  写文件的意思
     59 
     60     s  string  字符串
     61 
     62     printf  输出到外部  fprintf 写文件
     63     scanf 读取数据    fscanf读文件
     64     read 读取  fread 读取文件
     65     write    fwrite 写文件
     66 
     67 
     68     文本文件  字符类型     数字 123456 -->字符串存到文本当中   6个字符表示这个数字  
     69             (没有乱码 但是保密性不强)
     70 
     71     二进制  用计算机内部存放方式  123456 整数  int  占4个字节
     72             (读取的时候  比较快  但是会有乱码  适合程序使用)
     73 
     74 
     75     fseek  //移动文件指针
     76     ftell    //计算文件内部指针的偏移(相对于文件开头的偏移)
     77     feof
     78 
     79     rewind    rewind将文件指针移回文件开头
     80         
     81 
     82         fp (文件内部指针)  打开文件之后 fp始终指向文件
     83         但是 有一个文件内部指针 指向当前读写的位置
     84             如果r打开  内部指针就在开头
     85             w/a  文件末尾
     86 
     87 
     88 
     89     remove  删除文件   remove("123.txt");
     90 */
     91 #include<stdio.h>
     92 
     93 typedef struct student        //结构体类型
     94 {    
     95     int ID;
     96     char name[10];
     97     ///....
     98 }STU;    //使用typedef给类型取别名
     99 
    100 union MyUnion
    101 {
    102     int x;
    103     float y;
    104 };
    105 
    106 enum dir
    107 {
    108     UP,DOWN,LEFT,RIGH  //常量  有名字可以提高代码可读性  一般搭配switch使用
    109 };
    110 
    111 void test(){
    112     STU beiwang;//结构体变量
    113     beiwang.ID;  // ->箭头运算符
    114 
    115     STU*p = &beiwang;
    116     p->ID;
    117 
    118     int arr[10];
    119     arr[0];
    120 
    121     union MyUnion beibei;
    122     beibei.x = 3;
    123     beibei.y = 4.0f;    //当给其中一个成员赋值  ,其他成员的值就会失效
    124 }
    125 
    126 void readFile()
    127 {
    128     FILE* fp;//定义一个文件指针        file pointer
    129     fp = fopen("./123.txt","r");
    130     /*
    131     1. 文件的路径  一般相对路径
    132     2. 第二个参数 是文件的打开方式 主要三种 rwa
    133         r  read 读取  从文件中读取数据 如果文件不存在 就会打开失败
    134         w  write 写入 清空文件 然后写入 
    135         如果文件不存在 就会创建一个新文件
    136         a  append 追加    是在源文件后面 增加新的内容 文件不存在 会创建新文件
    137         
    138             
    139         修饰  后面可以加b或者t   b表示二进制文件  t表示文本文件(一般省略t)
    140 
    141             rb  用读取的方式打开二进制文件  如果文件不存在 就会打开失败
    142             rt  用读取打开文本文件  (t可以省略)
    143 
    144 
    145         +  如果在后面加上一个+  表示文件可读写
    146           rb+   用读取的方式打开二进制文件  文件可以读写
    147 
    148 
    149           rb+  b表示二进制文件  + 文件可以读写
    150                 r  用读取的方式打开  如果文件不存在 会打开失败
    151     */
    152     if (fp == NULL)//说明文件打开失败
    153     {
    154         printf("文件打开失败
    ");
    155         return;//打开失败 直接return
    156     }
    157 
    158     //一个字符一个字符读取文件中的内容
    159     //char ch;
    160     ////ch = fgetc(fp);//读取文件中的一个字符
    161     ////putchar(ch);//将读取到的字符输出到屏幕
    162     //while (1)        //EOF end of file  表示文件末尾
    163     //{
    164     //    ch = fgetc(fp);
    165     //    if (ch == EOF) break;//  读到文件末尾 结束读取
    166     //    putchar(ch);
    167     //}
    168 
    169     //一行一行读取文件
    170     char str[128];
    171     //fgets(str, 128, fp);  //读取一行(不超过128个字符)
    172 
    173     //判断fgets的返回值 就可以判断文件有没有读取完毕
    174 
    175     //while (fgets(str,128,fp)!=NULL) puts(str);//使用返回值 判断文件是否读完
    176 
    177     while (1)
    178     {
    179         fgets(str, 128, fp);//读取一行
    180         printf("%s",str);
    181         if (feof(fp)) break;    //条件为真 表示已经读到文件末尾  可以结束
    182         
    183     }
    184 
    185     rewind(fp);//将文件指针移动回文件的开头
    186     ftell(fp);//计算的文件指针的偏移 单位是字节
    187 
    188 
    189 
    190 
    191     fclose(fp); //关闭文件的意思   保存文件
    192 }
    193 
    194 void writeFile()
    195 {
    196     FILE* fp;//定义一个文件指针        file pointer
    197     fp = fopen("./写入.txt", "w");
    198     if (fp == NULL)//说明文件打开失败
    199     {
    200         printf("文件打开失败
    ");
    201         return;//打开失败 直接return
    202     }
    203 
    204     //可以先准备一个字符 或者先准备一个字符串
    205     //直接讲字符写入文件当中
    206 
    207     //fputc('A', fp);//写入一个字符
    208     //char str[128] = "你好 世界";
    209     
    210     //for (int i = 0; str[i] != ''; ++i)
    211     //{
    212     //    fputc(str[i], fp);
    213     //}
    214 
    215     //fputs(str, fp);//将一串字符写入到文件当中
    216 
    217     STU arr[4] = { 1, "张三", 2, "李四", 3, "王五", 4, "赵六" };
    218 
    219     for (int i = 0; i < 4; ++i)
    220     {
    221         fprintf(fp, "%d	%s
    ", arr[i].ID, arr[i].name);
    222     }
    223 
    224 
    225 
    226 
    227     fclose(fp);
    228 }
    229 
    230 void show()//和fprintf相关的读取
    231 {
    232     FILE* fp;//定义一个文件指针        file pointer
    233     fp = fopen("./写入.txt", "r");
    234     if (fp == NULL)//说明文件打开失败
    235     {
    236         printf("文件打开失败
    ");
    237         return;//打开失败 直接return
    238     }
    239     STU st;
    240 
    241     while(EOF!=fscanf(fp, "%d	%s
    ", &st.ID, st.name))//读取数据
    242         printf("%d	%s
    ", st.ID, st.name);
    243 
    244     fclose(fp);
    245 
    246     //scanf  %s输入字符串  字符串中间不能有空格
    247     //fscanf读取字符串时候 中间同样不能有空格
    248 }
    249 
    250 void read()
    251 {
    252     FILE* fp;//定义一个文件指针        file pointer
    253     fp = fopen("./test.summer", "rb");  //后缀名随便写的
    254     if (fp == NULL)//说明文件打开失败
    255     {
    256         printf("文件打开失败
    ");
    257         return;//打开失败 直接return
    258     }
    259     
    260     STU st;//读取文件
    261     while(fread(&st, sizeof(STU), 1, fp)!=0)
    262         printf("%d	%s
    ", st.ID, st.name);
    263 
    264 
    265     printf("文件指针的偏移是%ld字节
    ", ftell(fp));
    266     fseek(fp, sizeof(STU), SEEK_SET);//文件指针 从文件开头偏移16个字节
    267     //第一个 参数 文件指针 
    268     //第二个参数 是要移动多少个字节 16 往后移动16个字节
    269     //如果是-16  那么往前移动16个字节
    270     //最后一个参数  SEEK_SET 文件开头
    271     //               SEEK_END 文件末尾
    272     //               SEEK_CUR  文件指针当前位置
    273 
    274 
    275 
    276 
    277 
    278     while (fread(&st, sizeof(STU), 1, fp) != 0)
    279         printf("%d	%s
    ", st.ID, st.name);
    280 
    281 
    282     fclose(fp);
    283 }
    284 
    285 void write()
    286 {
    287     FILE* fp;//定义一个文件指针        file pointer
    288     fp = fopen("./test.summer", "wb");
    289     if (fp == NULL)//说明文件打开失败
    290     {
    291         printf("文件打开失败
    ");
    292         return;//打开失败 直接return
    293     }
    294 
    295     STU arr[4] = { 1, "张三", 2, "李四", 3, "王五", 4, "赵六" };
    296 
    297     //一个结构体当成一个整体   二进制文件 用字节为单位进行写入
    298 
    299     fwrite(arr, sizeof(STU), 4, fp);//结构体直接写入到文件当中
    300     //第一个  地址
    301     //第二个 单个的大小
    302     //第三个 个数
    303     
    304 
    305 
    306 
    307 
    308     fclose(fp);
    309 }
    310 
    311 
    312 int main()
    313 {
    314     //readFile();
    315     //writeFile();
    316 
    317     //show();
    318 
    319     write();
    320     read();
    321 
    322     //图形库  颜色  RED
    323     //按键消息  WM_LBUTTONDOWN 
    324 
    325     getchar();
    326     return 0;
    327 }
    328 /*
    329     fopen---->fopen_s
    330 
    331     fopen_s(&fp,文件路径,文件打开方式);
    332 
    333     fp=fopen(文件路径,文件打开方式);
    334 */
  • 相关阅读:
    wget命令
    Linux常用命令大全
    centos7 中文乱码问题解决方法
    Linux软件安装的补充
    redis在Linux上的安装
    Linux下tomcat的安装
    Linux常见命令
    Linux下jdk安装过程
    JAVA中日期处理
    JAVA中File类的使用
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/10582259.html
Copyright © 2011-2022 走看看