74.【C语言】文件操作(1)

目录

1.进行文件操作的原因

销毁的示例

2.文件的类型

1.操作文件的步骤

2.文件名

3.查看文件路径的方法

方法1

方法2

方法3

4.数据文件的介绍

举例

① ASCII码的形式(即字符形式)存储

01.手动写入数据

02.用程序写入数据

②二进制形式存储

理解"不加转换"的含义


1.进行文件操作的原因

为了存档(写入ROM),即保存重要的数据(防止突然断电丢失(为RAM的特性)或者程序退出,其内存交换操作系统,被销毁),存档可以在程序下次运行时加载(恢复)数据

RAM:随机存取存储器(Random Access Memory)

销毁的示例

x86+debug环境下

int main()
{
	int a = 1;
	return 0;
}

 执行完int a = 1;后,打开内存窗口,输入&a

0af6630882364d3d84335c0d326f2a3c.png

0x008FFE50为a存放的地址

在Cheat Engine下,挂载程序,搜素字节数组01 00 00 00 cc cc cc cc 78 fe 8f 00

注意关掉快速扫描

单击首次扫描

5fe358225e664cbda28d38230b5ee3a5.png

可以查到两个结果8a5f69537a724d56a36490288de19594.png

随便选一个,右击浏览相关内存区域

93e9fd818ced46108ec939cff00007a2.png

注意看a的值

13a66db9498f473aae32d3a3f16b9265.png

待程序退出后再次调试程序,查看

eeb1a0c90f184a7cb75cfcb2adf0e5b9.png

01 00 00 00被00 00 00 00覆盖(空间被回收)

2.文件的类型

这里讲的文件指的是放在磁盘/U盘/软盘/...里的文件

分为程序文件(*.c,*.cpp,*.obj,*.exe......)和数据文件,本文谈论的是数据文件

1.操作文件的步骤

打开文件(fopen函数)-->操作(读取(输出)数据(fread函数)或写入(输入)数据)文件(fwrite函数)-->关闭文件(fclose函数)

2.文件名

文件名=文件路径+文件名主干+文件后缀

如 C:\Program Files\1.exe

指的是C盘的Program Files文件夹下(路径)有一个1(文件名主干).exe(后缀)文件

文件标识常被称为文件名

3.查看文件路径的方法

方法1

win11,右击文件,选择属性

d94a0349882b48d3a6a81763a32e66bd.pnge1a93b9217c24c8eb8208d961f9d2661.png

方法2

win11,右击文件,选择复制文件地址,粘贴到任意输入框中查看

5b3380d469f541f2ae516f0303115f24.png

方法3

下图双击空白处

f499b5bf434d450f9e984d761239118d.png

注意:C:\Program Files\1.exe含的是反斜杠

4.数据文件的介绍

数据文件被称为文本文件或者二进制文件

数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件中,就是二进制文件

如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件

举例

例如存储数字5000,有两种形式存储,

① ASCII码的形式(即字符形式)存储

ASCII码为的是能在屏幕上显示字符

查ASCII码表可知:字符5对应十六进制的35,字符0对应十六进制的30
cba2c42abbc84e308d17c805aef82d72.png

01.手动写入数据

如果将5000写入记事本后,用HxD.exe打开

1cf264dfae1e40668444b80af8f6536a.png

35 30 30 30占4个字节

02.用程序写入数据

#include <stdio.h>
int main()
{
	int a = 5000;
	FILE * pf = fopen("a.bin", "wb");//wb:write byte
	//二进制的形式写到文件中
	fwrite(&a, 4, 1, pf);//4代表以int形式存储,1代表写入1次
	fclose(pf);
	pf = NULL;
	return 0;
}

将生成的exe文件和新建的a.bin文件(里面没有任何内容)放到一起,接着在VS中添加现有项

5d556935846b4dfab97b5128b02a1446.png

之后运行

87767134237747da9514125f1c388981.png

点Yes

47850b6cc3d349aebfe2e302c5ee7175.png

数据不加以转换,由于VS以小端序存储,故写入88 13 00 00而不是00 00 13 88

备注:a.bin存储在

268c9c92698b420b8b72e39f5a306ae4.png

②二进制形式存储

打开计算器,转到程序员模式

DWORD下,b23dcc990ff04025a4260f53e7baf438.png

其中0001 0011 1000 1000-转换为十六进制->13 88(大端序存储)占2个字节

理解"不加转换"的含义

将"1.进行文件操作的原因"下面的代码用VS保存为exe文件,用记事本打开查看,发现是乱码

a0bf5430a3e54db88767a2ea56f849c3.png

形成乱码的原因是a614c50cd8e04f059dd431e6996e17a7.png,记事本将exe文件加以转换,用ANSI编码的形式呈现;

用HxD.exe查看

282f75ff3dc84fe782e66d84cc6727c7.png

如果不加转换,就是以二进制的形式呈现(将二进制转换为十六进制是为了方便阅读)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值