复习:
#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不存在

测试代码笔记如下:

 #include<stdio.h>

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

附:

2019-03-28  21:30:57

C++学习(二十八)(C语言部分)之 文件操作的更多相关文章

  1. Java开发学习(二十八)----拦截器(Interceptor)详细解析

    一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...

  2. Python学习二十八周(vue.js)

    一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...

  3. JavaWeb学习 (二十八)————文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  4. ballerina 学习二十八 快速grpc 服务开发

    ballerina 的grpc 开发模型,对于开发者来说简单了好多,不是schema first 的方式,而是我们 只要编写简单的ballerina service 就可以了,proto 文件是自动帮 ...

  5. python学习 (二十八) Python的for 循环

    1: for 循环可以循环如下类型: my_string = "abcabc" // 字符串类型 for c in my_string: print(c, end=' ') car ...

  6. 渗透测试学习 二十八、WAF绕过详解

    大纲: WAF防护原理讲解 目录扫描绕过WAF 手工注入绕过WAF sqlmap绕过WAF 编写salmap绕过WAF 过WAF一句话编写讲解 菜刀连接绕过WAF webshell上传绕过WAF 提权 ...

  7. 前端学习(二十八)es6&ajax(笔记)

    ES6    let    块级作用域    const    解构赋值    字符串拼接    扩展运算符    ------------------------------------------ ...

  8. Salesforce LWC学习(二十八) 复制内容到系统剪贴板(clipboard)

    本篇参考: https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipb ...

  9. ElasticSearch7.3学习(二十八)----聚合实战之电视案例

    一.电视案例 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 字段 PUT /tvs PUT /tvs/_mapping { "properties": { &q ...

  10. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...

随机推荐

  1. JS&Jquery中的循环/遍历

    JavaScript中的遍历 for 遍历 var anArray = ['one','two']; for(var n = 0; n < anArray.length; n++) { //具体 ...

  2. css 中的grid布局基础

    CSS Grid Layout为CSS引入了一个二维网格系统.网格可用于布局主要页面区域或小型用户界面元素. 网格是一组交叉的水平和垂直线 - 一组定义列,其他行.元素可以放在网格上,以行或者列为标准 ...

  3. hdu3518

    题解: 后缀数组 枚举长度为k(1<=k<=len/2)的满足要求的子串个数 代码: #include<cstdio> #include<cmath> #inclu ...

  4. js 设置img标签的src资源无法找到的替代图片(通过img的属性设置)

    在网站的前端页面设计中,要考虑到img图片资源的存在性,如果img的src图片资源不存在或显示不出来,则需要显示默认的图片.如何做到呢? 一.监听document的error事件 document.a ...

  5. MySQL - exists与in的用法

    [1]exists 对外表用loop逐条查询,每次查询都会查看exists的条件语句. 当 exists里的条件语句能够返回记录行时(无论记录行是多少,只要能返回),条件就为真 , 返回当前loop到 ...

  6. 如何在ubuntu上搭建hustoj?

    1.安装MySQL apt-get install mysql-server mysql-client 安装的过程会弹出一个框,输入sql密码,按TAB切换到ok 2.安装apache2 apt-ge ...

  7. 八. Python基础(8)--函数

    八. Python基础(8)--函数 1 ● 函数返回布尔值 注意, 自定义的函数也可以是用来作逻辑判断的, 例如内置的startswith()等函数. def check_len(x):     ' ...

  8. js正则学习

    一直对正则很纠结也很畏惧,以前感觉花时间理解一个个奇奇怪怪的符号,还不如直接百度谷歌之. 但知其然不知其所以然也是种痛苦,所以花了两天稍微学了一下,虽然没学很深入彻底,但也比之前进步不少,特此笔记. ...

  9. loadrunner http协议性能测试脚本编写

    性能测试其实测的就是接口的性能,不管是用工具录制还是自己写,都是围绕接口的,录制也是把接口录制下来而已,但是录制下来的脚本比较乱,会把很多相关的请求都录下来. 在这里我们手动写HTTP协议的get.p ...

  10. Appium 自带的定位工具 Inspector

    前言:Appium Inspector是appium自带的一个元素定位工具 一.设置appium 1.点开android setting界面(机器人图标) 2.勾选Application Path,添 ...