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. ...
随机推荐
- C#通过shell32获取文件详细备注信息
1.从系统Window/System32文件夹中Copy出 Shell32.dll Com组件 将Shell32.dll文件引用到项目中,并设置“嵌入互操作类型”为false http://blog. ...
- cocos2d方块方块
cGridSize=32 cSceneWidth=8+2 cSceneHeight=18 fuction Grid2Pos(x,y) local visibleSize=cc.Director:get ...
- jsp标签之jsp:setProperty用法
参考:http://blog.csdn.net/wanghaishanren/article/details/2047400
- nginx:负载均衡实战(二) keepalived入门
1.keepalived介绍 顾名思义,keepalived就是保持网络在线的,用来保证集群高可用HA的服务软件.主要防止出现单点故障(坏了一个点导致整个系统架构不可用) 2.详解keepalived ...
- RabbitMQ 均衡调度(公平分发机制)
均衡调度是针对Consumer来说的.现在有两个Consumer请求同一个队列的消息.RabbitMQ会将序号为奇数的消息发给第一个Consumer,会将序号为偶数的消息发送给第二个Consumer. ...
- 十一. Python基础(11)—补充: 作用域 & 装饰器
十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...
- python笔记4-if..elif-else条件语句
python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样,否则就怎么怎么这样,格式如下: #if是布尔类型判断,1个是真1个是假 ...
- Docker常用命令学习
sudo service docker startsudo docker run hello-worlddocker stats --helpdocker run -d -P training/web ...
- 循环神经网络-RNN入门
首先学习RNN需要一定的基础,即熟悉普通的前馈神经网络,特别是BP神经网络,最好能够手推. 所谓前馈,并不是说信号不能反向传递,而是网络在拓扑结构上不存在回路和环路. 而RNN最大的不同就是存在环路. ...
- Python 基础数据类型相互转换
字符串,数字,列表 ,元祖,字典 化相互转化 1 Int 与 str 之间如何转化,转换的结果是什么?有没有条件? #str(int型)可以转化为str 该过程没有条件 #字符串转化为 ...