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不存在
测试代码笔记如下:
#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语言部分)之 文件操作的更多相关文章
- Java开发学习(二十八)----拦截器(Interceptor)详细解析
一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...
- Python学习二十八周(vue.js)
一.指令 1.一个例子简单实用vue: 下载vue.js(这里实用1.0.21版本) 编写html代码: <!DOCTYPE html> <html lang="en&qu ...
- JavaWeb学习 (二十八)————文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- ballerina 学习二十八 快速grpc 服务开发
ballerina 的grpc 开发模型,对于开发者来说简单了好多,不是schema first 的方式,而是我们 只要编写简单的ballerina service 就可以了,proto 文件是自动帮 ...
- python学习 (二十八) Python的for 循环
1: for 循环可以循环如下类型: my_string = "abcabc" // 字符串类型 for c in my_string: print(c, end=' ') car ...
- 渗透测试学习 二十八、WAF绕过详解
大纲: WAF防护原理讲解 目录扫描绕过WAF 手工注入绕过WAF sqlmap绕过WAF 编写salmap绕过WAF 过WAF一句话编写讲解 菜刀连接绕过WAF webshell上传绕过WAF 提权 ...
- 前端学习(二十八)es6&ajax(笔记)
ES6 let 块级作用域 const 解构赋值 字符串拼接 扩展运算符 ------------------------------------------ ...
- Salesforce LWC学习(二十八) 复制内容到系统剪贴板(clipboard)
本篇参考: https://developer.mozilla.org/zh-CN/docs/Mozilla/Add-ons/WebExtensions/Interact_with_the_clipb ...
- ElasticSearch7.3学习(二十八)----聚合实战之电视案例
一.电视案例 1.1 数据准备 创建索引及映射 建立价格.颜色.品牌.售卖日期 字段 PUT /tvs PUT /tvs/_mapping { "properties": { &q ...
- python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置
python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置Download JetBrains Python IDE :: PyCharmhttp://www. ...
随机推荐
- mysql sql_mode=only_full_group_by问题?
视图查询的时候本地数据库报错: 解决办法: 1.查看sql_mode select @@global.sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_Z ...
- jdk8-lanbda方法引用和构造引用
1.方法引用概念及实例 1.对象实例方法 语法格式: 对象::实例方法名称 注意点: 实例方法必须和被实现的接口中定义的方法的参数列表和返回值一致.一般适合于一个方法就实现了的. 2.类::静态方法 ...
- Ansible-playbook的简单使用 [转]
一. 介绍 ansbile-playbook是一系列ansible命令的集合,利用yaml 语言编写.playbook命令根据自上而下的顺序依次执行.同时,playbook开创了很多特性,它可以允许你 ...
- Problem A 你会定义类吗?
Description 定义一个类Demo,有构造函数.析构函数和成员函数show(),其中show()根据样例的格式输出具体属性值.该类只有一个int类型的成员. Input 输入只有一个整数,in ...
- Appium Python API
1.contexts contexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的 ...
- thinkphp5.1学习笔记
由于新公司使用的框架是thinkphp5.1,有必要进一步学习,看来我要把php框架使用完全了,之前就用过laravel和CI框架了. 现在打算只是一个学习的记录,结构会比较凌乱,基本我估计只能自己看 ...
- python 3.x 字典的11种方法
python 3.x 字典的11种方法2017年11月25日 01:02:11 Milton-Long 阅读数:535 标签: python python字典方法 更多个人分类: python-学习之 ...
- navicat下载安装和激活一分钟完成
下载navicat安装包和注册机 下载地址:https://pan.baidu.com/s/1Nakfuv7Z__vLiY6sHNusNg 提取码:v4gz 安装navicat 软件 以管 ...
- Java并发机制和底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码转化为汇编指令在CPU上执行.Java中的并发机制依赖于JVM的实现和CPU的指令. Java语言规范第三版中 ...
- MySQL 显示表字段及注释等信息
SHOW TABLES from resource [FROM db_name] //列出数据库数据表 SHOW TABLE STATUS from resource [FROM db_name] ...