文件操作总结

2023-10-29

一、文件三大核心内容

1.1打开文件

FILE* fp =fopen(“文件路径.后缀”,“以什么方式打开”);
打开文件的两种方式:以二进制形式打开文件、以文本文件形式打开文件

1.2读写操作

读操作:int num=fread(buffer,sizeof(),count,fp);

例如:char buff[256]; int num=fread(buff,char,256,fp);//代表的意思为,在fp所指向的文件中,一次读取最大容量256个sizeof(char),若不够256,将剩余内容读取给buff ,成功读取的剩余个数给到num

写操作:fwrite(buffer,sizeof(),count,fp);
char buff[256]; int num=fread(buff,char,256,fp);//代表的意思为,从buff数组中读取256个大小为sizeof(char)的元素,并写入fp所指向的文件路径中
buffer:代表数组,sizeof():代表元素字节大小,count:每次读或写元素的个数,fp:文件指针

1.3关闭文件

fclose(fp); //关闭fp所指向的文件路径
fp=NULL;

二、文件基本知识点

2.1操作系统是以文件为单位对数据进行管理

操作系统是以文件为单位对数据进行管理

2.2数据流

数据流:流表示从源端到终端(目的端)的流动 输入流(以内存为基础):数据从文件(外存)流向计算机内存
输出流(以内存为基础):数据从计算机内存流向文件(外存)

2.3文件路径

1.D:\1.txt <=> D:/1.txt
2.绝对路径(一定是从根目录开始的): 在Windows系统中:我们将文件保存到磁盘上:例如:C:/a/e/1.txt、 C盘也叫做根目录。 在Linux系统中:根目录/home/stu/1.txt(只有一个根目录)
3.相对路径(相对当前位置的路径):例如:当前C盘下的 Promgram File(X86)…

2.4文件打开方式

文本文件:.txt .cpp ASCII文件
二进制文件:多媒体 .ppt .mp3 .mv .jpg
例如:数值型数据既可以用ASCII形式存储,也可以用二进制形式存储:
如整数10000,用ASCII码形式输出到磁盘,则在磁盘中占5个字节(一个字符占一个字节),而用二进制形式输出,则在磁盘上只占4个字节(10000是整数古,int型)

2.5文件缓存

1.缓冲、缓存、虚拟内存区别: 缓存(cache):是数据的缓冲区、当硬件读取数据时,首先再缓存中查找需要的数据,如果找到数据,直接使用, 找不到,在缓存以外的地方查找(缓存运行速度>内存)
2.虚拟内存:计算机系统(内存管理)一种技术。 linux:交换空间 拥有一块连续的内存地址,实际将数据通常分割成多个物理内存碎片
3.缓冲:向硬件设备中写入数据,先将数据放入缓冲区,一起向硬盘中写入, 写—>输入缓冲区 输出缓冲区。 减少IO CPU—>缓存—>内存—>磁盘

2.6在.cpp文件中的读写模式

读写模式:
r:可读 、 r+:可读可写操作 (文件必须存在,文件不存在 打开失败)
w:可写 、w+:可读可写操作 (文件存在,将原有文件内容覆盖,文件不存在,创建新文件)
a:追加(文件尾巴)、 a+:可读可写操作 (存在该文件,追加文件尾部进行操作,文件不存在 创建新文件)

三、文件具体操作

3.1文件基本操作

int main() {
	FILE* fp = fopen("d:/1.txt", "r+");
	if (fp == NULL) {
		printf("文件打开失败\n");
	}
	else {
		printf("文件打开成功\n");
	}
	/*const char* str = "world";*/
	//fwrite(str, sizeof(char),strlen(str),fp);
	char buff[256] = { 0 };
	int num=fread(buff, sizeof(char), 255, fp);
	printf("读取个数:%d %s\n", num, buff);
	
	fclose(fp);
	fp = NULL;
}

3.2文件拷贝

int main() {
	FILE* fp1 = fopen("文件操作.cpp", "r+");
	assert("fp1!=NULL");
	FILE* fp2 = fopen("文件操作2.cpp", "w+");
	assert("fp2!=NULL");
	int count = 0;
	char buff;
	while ((count=fread(&buff, sizeof(char), 1, fp1)) != 0) {
		fwrite(&buff, sizeof(char), 1, fp2);
	}
	fclose(fp1);
	fclose(fp2);
	fp1 = NULL;

3.3移动光标

int main() {
	FILE* fp1 = fopen("文件操作.cpp", "r");
	fseek(fp1, 10, SEEK_SET);//向后移动光标,从头像后偏移10个字符,换行也算一个字符
	//fseek(fp1, -2, SEEK_END);//向前移动光标
	printf("%c\n", getc(fp1));
	
	fclose(fp1);
}

3.4统计文件大小

/*SEEK_END:文件尾部
SEEK_CUR:文件当前位置
SEEK_SET:文件头部*/
int main() {
	FILE* fp1 = fopen("文件操作.cpp", "r");
	//统计文件大小,将光标移动到文件结尾处,在进行统计
	fseek(fp1, 0, SEEK_END);//将光标移动到结尾处
	long size=ftell(fp1);
	printf("%d", size/1024);
	fclose(fp1);
}

3.5 getc()、put()、的使用

//getc   putc;从文件获取一个字符   等价fread fwrite  fread返回值是读取个数,而getc返回值是字符 
int main() {
	FILE* fp1 = fopen("文件操作.cpp", "r");
	char buff;
	while ((buff=getc(fp1)) != EOF) {  //fread(&buff,1,1,fp1)
		//putc(fp1);   //fwrite('a',1,1,fp1)
		printf("%c", buff);
	}
	fclose(fp1);
} 

3.6 关于printf、fprintf的使用

 /* 标准输入  标准输出   标准错误
	stdin    stdout     stderr*/
int main() {
	printf("%d %d %d", 11, 12, 13);//...可变参数
	fprintf(stdout, "%d", 11);

	char buff[10] = { 0 };
	sprintf(buff, "%d,%d,%d", 10,11, 12);//ATM  2020-1-23-00:00


	char value=getc(stdin);  //从键盘输入一个字符
	putc(value, stdout);//从控制台输出该字符
	putc('a', stdout);
	FILE* fp = fopen("文件操作.cpp", "r");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件操作总结 的相关文章

随机推荐

  • 使用支持向量机进行航线预测————附Matlab代码

    使用支持向量机进行航线预测 附Matlab代码 随着交通运输的发展 航空公司需要提高飞行的效率和安全性 而飞行航线的规划是保证飞行效率和安全性的关键因素之一 因此 利用机器学习算法来预测航线 成为了一个热门的话题 其中 支持向量机 Supp
  • 绕过圆括号过滤实现XSS弹框

    用data协议
  • 思科实验9.网络层:PPP协议配置

    PPP协议配置 基础知识 常用命令 实验流程 目的 1 设计拓扑 2 配置主机IP地址 3 配置路由器 4 设置PPP协议 5 验证主机连通 基础知识 PPP协议即点对点协议 是在点对点连接上传输多协议数据包提供了一个标准方法 是一种点到点
  • 算法进阶指南:0x18:双栈排序

    Tom 最近在研究一个有趣的排序问题 通过 2 个栈 S1 和 S2 Tom 希望借助以下 4 种操作实现将输入序列升序排序 操作 a 如果输入序列不为空 将第一个元素压入栈 S1 操作 b 如果栈 S1 不为空 将 S1 栈顶元素弹出至输
  • uboot下内存操作mw和md命令详解

    mw简介 u boot 中的 mw 命令是用于向内存写入数据的命令 它有4种形式 mw b 写入 1 个字节 8 比特 的数据 mw w 写入 1 个字 2 字节 16 比特 的数据 mw l 写入 1 个长字 4 字节 32 比特 的数据
  • Redis 学习笔记2:redis.conf配置文件详解

    Redis 的配置文件位于 Redis 安装目录下 文件名为 redis conf 参数说明 参数说明 redis conf 配置项说明如下 1 Redis默认不是以守护进程的方式运行 可以通过该配置项修改 使用yes启用守护进程 daem
  • 阻抗匹配之反射波形测量

    稍微接触过高速信号的朋友 一定对阻抗匹配和信号反射都有所了解 甚至可以按照公式 把反射波形一路推导出来 但是 纸上得来终绝浅 绝知此事要躬行 今天 我们就来实测一下信号反射波形 测试环境如下 信号发生器产生一个1 25MHz VPP 2V的
  • 数据库连接池(C++11实现)

    目的 因为对数据库的操作实质上是对磁盘的IO操作 所以如果对数据库访问次数过多 就会到导致大量的磁盘IO 为了提高MySQL数据库 基于C S设计 的访问瓶颈 除了在服务器端增加缓存服务器缓存常用的数据 之外 例如Redis 还可以增加连接
  • [POJ1088] 滑雪(递归dp)

    Description Michael喜欢滑雪百这并不奇怪 因为滑雪的确很刺激 可是为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 Michael想知道载一个区域中最长底滑坡 区域由一个二维数组
  • yolov5 6.0运行

    1 github下载yolov5 6 0代码 下载链接 2 利用Anaconda安装所需环境参考 如何配置pytorch 3 在pycharm打开文件并选择配置好的环境编译器 4 安装所需模块 利用作者提供的requirements txt
  • linux系统编程(七)进程

    文章目录 1 进程 1 1 进程相关概念 1 1 1 程序和进程 1 1 2 并发 1 1 3 单道程序设计 1 1 4 多道程序设计 1 1 5 CPU和MMU 1 1 6 进程控制块PCB 1 1 7 进程状态 1 2 环境变量 1 2
  • opencv条码(4)图像的flip之图形化界面

    flip函数可以实现图像反转 这里贴出mainwindow cpp的内容吧 书上的代码对应opencv2 2现在有些不能用了请注意 include mainwindow h include ui mainwindow h using nam
  • 华为OD机试 - 最小循环子数组(Java)

    题目描述 给定一个由若干整数组成的数组nums 请检查数组是否是由某个子数组重复循环拼接而成 请输出这个最小的子数组 输入描述 第一行输入数组中元素个数n 1 n 100000 第二行输入数组的数字序列nums 以空格分割 0 nums i
  • Java架构直通车——理解Tomcat架构设计

    文章目录 引入 Socket与SeverSocket 一个简单Web容器设计与实现 理解Tomcat架构设计 什么是Servlet Tomcat Servlet容器 引入 Socket与SeverSocket Socket Socket是网
  • SpringBoot整合Logback日志框架配置全解析

    一 Logback日志框架介绍 SpringBoot使用 Commons Logging 进行所有内部日志的记录 但默认配置也提供了对常用日志的支持 如 Java Util Logging Log4J2 和Logback 每种logger都
  • npm install node-sass的时候报错ERR gyp ERR C++

    今天在项目里执行npm i命令的是后报错一大片 搜了很多文章 都没有到点上 突然灵感一闪 可能是电脑上没有c 编译环境的问题 但是是我在电脑上运行c文件是正常的 搜到一篇文章里写的情况是这样的 npm分发的都是源码 npm install的
  • oracle如何得到32位的世界唯一随机数

    author skate time 2008 2 18 oracle如何得到32位的世界唯一随机数 我们在创建表的时候一般都用序列生成的数字来保证数据的唯一 但这只能保证在单个实例中 无法适合并行或远程的环境的主关键字 因为在各自环境理里可
  • 数据库基本概念、ubuntu安装MySQL

    安装MySQL参考了这篇博客 Ubuntu18 04 安装MySQL SQL创建表格 添加元组 MySQL创建数据库 需要创建的student和course表 进入sql前要先进入root用户 创建数据库 加分号代表结束语句 在数据库中建表
  • 阿里云通过全球加速实现IPv6地址转换

    购买全球加速实例和基础带宽包 打开 全球加速 先配置基础带宽包 点击实例 点击 加速区域 选择 添加接入地域 去配置监听 在 加速区域 复制 加速IP 到指定的DNS云解析处 添加AAAA记录 测试 开启手机热点 笔记本连上热点 取消属性里
  • 文件操作总结

    文章目录 一 文件三大核心内容 1 1打开文件 1 2读写操作 1 3关闭文件 二 文件基本知识点 2 1操作系统是以文件为单位对数据进行管理 2 2数据流 2 3文件路径 2 4文件打开方式 2 5文件缓存 2 6在 cpp文件中的读写模