复习:
#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. HTTP、TCP、UDP的区别

    TCP.UDP的区别 1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 2.TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失,不重 ...

  2. jquery radio使用

    var list= $('input:radio[name="list"]:checked').val();

  3. MATLAB 图片折腾4

    重新安排矩阵的x,y,z , 在二维中就相当于把x,y 对换,在三维中相当于可以把三个坐标的位置互换. 比如A = A(:,:,1)=repmat(1,3,3);A(:,:,2)=repmat(2,3 ...

  4. sas 选择一段日期,和一定周期,生成日期序列和周期序列

    工作需要,得选择一段日期,和一定周期,生成日期序列和周期序列.暂时用七天为一个周期 data d; format date date9.; do date='04mar2018'd to'05may2 ...

  5. 2.11 C++转型构造函数

    参考:http://www.weixueyuan.net/view/6343.html 总结: 带参数的构造函数中有两种比较常见的构造函数:拷贝构造函数和转型构造函数. 转型构造函数只有一个参数,如果 ...

  6. SQL-25 获取员工其当前的薪水比其manager当前薪水还高的相关信息

    题目描述 获取员工其当前的薪水比其manager当前薪水还高的相关信息,当前表示to_date='9999-01-01',结果第一列给出员工的emp_no,第二列给出其manager的manager_ ...

  7. windows消息传送(自定义消息和WM_COPYDATA)

    通过SendMessge实现的进程间通信. 0x01 自定义消息 1,WINDOWS中自定义消息的定义和使用: (1)在WNDOWS中消息分系统消息和自定义消息.系统消息定义从0到0x3FF,使用0x ...

  8. DevExpress WinForms v18.2新版亮点(八)

    买 DevExpress Universal Subscription  免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...

  9. FutureTask

    因为实现了runnable接口,所以重写了run方法 Future接口如果用在多线程中,实现类一般是有一个volatile的属性,用来标志状态,比如state,如果事情做完了,那么会设置state为成 ...

  10. jsp连接java类出问题

    问题:UserBean cannot be resolved to a type 解决: (1)jdk不匹配(或不存在)     项目指定的jdk为“jdk1.6.0_18”,而当前eclipse使用 ...