目录
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
0x008FFE50为a存放的地址
在Cheat Engine下,挂载程序,搜素字节数组01 00 00 00 cc cc cc cc 78 fe 8f 00
注意关掉快速扫描
单击首次扫描
可以查到两个结果
随便选一个,右击浏览相关内存区域
注意看a的值
待程序退出后再次调试程序,查看
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,右击文件,选择属性
方法2
win11,右击文件,选择复制文件地址,粘贴到任意输入框中查看
方法3
下图双击空白处
注意:C:\Program Files\1.exe含的是反斜杠
4.数据文件的介绍
数据文件被称为文本文件或者二进制文件
数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件中,就是二进制文件
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件
举例
例如存储数字5000,有两种形式存储,
① ASCII码的形式(即字符形式)存储
ASCII码为的是能在屏幕上显示字符
查ASCII码表可知:字符5对应十六进制的35,字符0对应十六进制的30
01.手动写入数据
如果将5000写入记事本后,用HxD.exe打开
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中添加现有项
之后运行
点Yes
数据不加以转换,由于VS以小端序存储,故写入88 13 00 00而不是00 00 13 88
备注:a.bin存储在
②二进制形式存储
打开计算器,转到程序员模式
DWORD下,
其中0001 0011 1000 1000-转换为十六进制->13 88(大端序存储)占2个字节
理解"不加转换"的含义
将"1.进行文件操作的原因"下面的代码用VS保存为exe文件,用记事本打开查看,发现是乱码
形成乱码的原因是,记事本将exe文件加以转换,用ANSI编码的形式呈现;
用HxD.exe查看
如果不加转换,就是以二进制的形式呈现(将二进制转换为十六进制是为了方便阅读)