zoukankan      html  css  js  c++  java
  • C++学习(二十八)(C语言部分)之 文件操作

    复习:
    #define 定义一个宏
    #include 文件包含
    #if 条件
    防止头文件重复包含
    定义一个宏 判断宏是否定义 判断头文件是否包含
    #define _STDIO_H_
    #include<stdio.h>
    #pragma once 防止头文件重复包含 房子头文件的最前面
    多文件 .h+*.cpp
    函数声明放在 .h 函数定义放在同名的 .cpp中 cpp包含.h文件
    用的时候包含.h 就可以用里面的函数


    文件操作
    保存在内存中地数据 不管程序结果 电脑关机 内存都会回收 数据不在了
    需要保存数据---->文件操作
    1.文件后缀 .txt .cpp .h .avi 取决于怎么打开这种文件 但里面的内容和格式(后缀)无关
    fp = fopen("2.txt", "w"); //第一个参数 文件路径 第二个参数 打开方式
    //r 用只读的方式打开文件 文件存在 打开成功 不存在 打开失败 fpNULL
    //w 用只写的方式打开文件 文件存在 就把文件清空 文件不存在就创建一个新文件
    //a 用追加的方式打开文件 文件存在将内容追加到文件末尾 文件不存在就新建一个文件
    //文件 1.文本文件 2.二进制文件
    //不管什么文件都可以用txt方式打开
    //文本文件是给人看的 一般来说不会有乱码
    //二进制文件 给计算机看的 一般不是给人看的(看不懂)(大部分是二进制文件 视频 音乐)
    //t 文本文件 rt 用只读防止打开文件 (默认)
    //b 二进制文件 rb 用只读方式打开二进制文件
    //+ 表示可读写文件 文件可以读也可以写
    //wb+ 用只写的方式打开一个可读写的二进制文件
    //wb+ ---->wb 只能读 wb+ 文件可读可写
    //文件后缀可以随意写 不影响内容
    //修改文件 读出来 内存中修改完成--->写回去
    //rb 用只读的方式打开二进制文件 rw不存在

    测试代码笔记如下:

     1 #include<stdio.h>
     2 
     3 int main()
     4 {
     5     FILE *fp;//fp  file  pointer  文件指针
     6     if (fp == NULL)
     7     {
     8         printf("文件不存在:"); return 0;//直接退出
     9     }
    10     else
    11     {
    12         printf("文件打开");
    13     }
    14     ///文件已经打开   写入数据 /读取数据
    15     
    16     //写入数据  
    17     char arr[] = "你好世界";
    18     //char arr[]="12345678";
    19 #if 0
    20     for (int i = 0; arr[i] != ''; ++i)
    21     {
    22         fputc(arr[i], fp);
    23     }
    24     fputc(0, fp);//写入一个字符到文件      char   一个字节的整型
    25 #elif 1
    26     fputs(arr, fp);//将字符串写入文件  写字符串的时候不会写入 
    27     //fputc('', fp);
    28     //fputs(arr, fp);//将字符串写入文件
    29 #else
    30 #endif
    31 
    32     fclose(fp);//关闭文件   (保存内容)
    33     //remove 删除文件(用路径)
    34     getchar();
    35     return 0;
    36 }
    37 
    38 //字符操作   fgetc   fputc
    39 //字符串    fgets  fputs
    40 //格式化写入写出 
    41 //fprintf  fscanf
    42 //printf("格式占位字符串%d",132)
    43 //fprintf(fp,"格式占位字符串%d",123);//将内容写入文件
    44 //fscanf 从文件中读取数据 
    45 //scanf("%d",&x);
    46 //fscanf(fp,"%d",&x);//从文件中读取一个数据  赋值给x
    47 
    48 
    49 //1.知道怎么写入的  就怎么读出来
    50 
    51 //char arr[100]="5";//
    52 
    53 
    54 //二进制文件读写方式  
    55 //结构体 用结构体大小作为单位读写
    56 //使用字节作为单位(可能会乱码)
    57 //可以用于任何类型的数据
    58 //fread  读取 文件内容
    59 //fwrite  写入文件
     1 #include<stdio.h>
     2 struct node
     3 {
     4     int x, y;
     5     double z;
     6 };
     7 int main()
     8 {
     9     FILE*fp = fopen("1.txt", "r");
    10     if (fp == NULL) return;
    11 #if 0
    12     for (int i = 0; i < 10; ++i)
    13     {
    14         printf("%c", fgetc(fp));//文件读取
    15     }
    16 #elif 1
    17     char  arr[100];//数组 稍大一点
    18     fgets(arr,100,fp);//读取文件内容    将文件中的内容 读取到内存中/用文件中的内容给变量赋值 
    19     //第一个参数 数组名  第二个参数  数组大小  第三个 文件指针
    20     // 实际上最多读取99个字符  +自动加的
    21     //遇到文件末尾  或者遇到换行  提前结束读取  
    22     //遇到会提前结束   遇到空格不会提前结束 
    23     puts(arr);//打印字符串
    24 #else
    25 #endif
    26     /*
    27     关于文件读写   全部通过文件指针操作
    28     文件内部指针说法   指向正在读/正在在写的位置
    29     r  每次r打开  文件内部指针指向文件开头
    30     w    也是指向文件开头
    31     a  指向文件末尾   
    32     
    33     文件写的时候   文件指向文件末尾  如果这个时候要读写 会出错
    34     文件  末尾 EOF    -1  
    35     
    36     */
    37     fclose(fp);
    38 
    39     /**************文件2*********************/
    40     //FILE *fp2 = fopen("2.txt", "wb");
    41     //struct node brr[2] = { { 1, 23, 3.14 }, { 3, 4, 7.89 } };
    42     //fwrite(brr, sizeof(struct node), 2, fp2);//写入
    43     //fclose(fp2);
    44 
    45     //读取文件
    46     FILE *fp2 = fopen("2.txt", "rb");
    47     //struct node brr[2] ;
    48     //fread(brr, sizeof(struct node), 2, fp2);//读取
    49     fseek(fp, 0, SEEK_END);//直接移动文件指针到达文件末尾
    50     long offset = ftell(fp);//得到当前偏移量   
    51     printf("文件大小%ld", offset);
    52 
    53     //fseek   通过偏移量移动文件指针
    54     //中间的是偏移量     
    55     //后面 SEEK_SET  文件开头
    56     //SEEK_CUR    //文件指针的当前位置
    57     //SEEK_END    //文件末尾
    58 
    59     //fseek移动文件指针的位置  是base+offset
    60 
    61     fclose(fp2);
    62     getchar();
    63     return 0;
    64 }

    附:

    2019-03-28  21:30:57

  • 相关阅读:
    数据库索引学习
    JavaScript提高:002:ASP.NET使用easy UI实现tab效果
    jQuery效果之显示与隐藏
    leetcode
    走进Struts2(五)— 值栈和OGNL
    Html中的超链接
    再理解 as3.0接口
    easyui combobox 三级级联 input 两种实现
    三层登录实例VB.NET版具体解释---理论加实战篇
    如何用Delphi开发网游外挂
  • 原文地址:https://www.cnblogs.com/Yuuki-/p/10617847.html
Copyright © 2011-2022 走看看