复习:
#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. linux下/proc/diskstats文件详解

    每一列的含义分别为: 第一列为 设备号 (number of issued reads. This is the total number of reads completed successfull ...

  2. shell脚本分析二

    Shell 基本运算符Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符原生bash不支持简单的数学运算,但是可以通过其他命令来实 ...

  3. 【转】caffe数据层及参数

    原文: 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个层(layer)构成,每一层又由许多参数组成.所有的参数都定义在caffe.proto ...

  4. 二叉树实现,C++语言描述

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  5. 6.2 C++ string类型字符串的连接

    参考:http://www.weixueyuan.net/view/6391.html 总结: 对于string类型变量,我们可以直接用“+”或者“+=”进行字符串的连接,操作符非常方便. 用“+”风 ...

  6. 自旋锁(Spin Lock)

    转载请您注明出处:    http://www.cnblogs.com/lsh123/p/7400625.html 0x01 自旋锁简介 自旋锁也是一种同步机制,它能保证某个资源只能被一个线程所拥有, ...

  7. Class file collision

    ecplise报错,提示:Class file collision (类文件冲突) 原因是:文件保存(编译)后,生成了class文件起了冲突,windows 系统认为Test.class 和test. ...

  8. Problem(I) STL - 灵活的线性表

    Description 数组和链表是我们熟知的两种线性结构,但是它们不够灵活(不能同时实现直接插入.删除和访问操作),给你若干种操作,你能通过一种灵活的容器,实现它们的功能吗? 操作1:Build a ...

  9. POJ - 1845 G - Sumdiv (唯一分解定理)

    Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S m ...

  10. 软件开发模式,DevOps

    参考文献:http://www.cnblogs.com/jetzhang/p/6068773.html 历史回顾 为了能够更好的理解什么是DevOps,我们很有必要对当时还只有程序员(此前还没有派生出 ...