4.文件操作基础与C++实现

一、了解文件操作

这一节需要讲解一个非常重要的板块:文件操作

在当今网络时代,什么价值最高?那当然就是数据了。

现代黑客,大多都是以钱为出发点的,而最值钱的,就是目标系统里面的资料,比如微软的windows操作系统源码,就是不公开的,如果能搞到这玩意,它卖出的价格,大部分人应该一辈子都不愁了。

当然,那几乎是不可能的,回到本文,上面的内容只是为了让你明白文件操作的重要性,因为所有操作系统保存数据的方式,基本都是通过文件。

那么什么是文件呢?想来大家都是用过word或者记事本的,没错,这些软件主要的作用就是操作文件:

image-20231128081839896

同样的,我们用VS写代码的时候,同样是在操作文件,唯一不同的可能就是它们似乎长得不一样?

看起来不一样的原因,是因为当我们安装软件时,该软件会向我们的电脑注册指定的后缀名。

如果你看不到这些后缀,如上图的.txt.docx等,是因为你没有开启电脑文件管理器的对应功能,可以参考这篇文章打开:程序员必懂的常识

然后我们可以来到设置中的应用->默认应用,然后分别搜索.txt.docx,就会发现它们有两个默认的打开软件:

image-20231128082043379

image-20231128082203473

在我这里,.txt文件默认用记事本打开,.docx默认用wps打开,其它文件也是同理,因为系统默认将指定后缀名的文件用特定软件打开,所以该后缀名文件的图标也会由该软件所指定。

这也是为什么当你点击这个文件,系统知道用什么软件打开的原因。

如果你将该后缀名的默认应用删除了,你再点击这个文件就会发现已经打不开了,会让你重新选择一个应用打开。

但说到底它也只是个文件而已,比如用记事本打开这个1.docx文件其实也一样可以!

image-20231128082443403

只不过出现的是乱码而已,那么为什么是乱码呢?

这是因为每个软件是通过特定格式向文件写入数据的,如果你不按这样的格式去读,就会是乱码。

比如一段数据为“YYDS”,熟悉网络用语的人可能会理解它为“永远的神”,但不熟悉网络用语的人完全可以理解它为“永远单身”。

这就产生歧义了,在计算机里面,用错误的方式读取文件数据,就会出现上图所示的乱码。

这也就是为什么有逆向工程师的存在,逆向相关文章可以查看逆向基础

二、代码中操作文件

既然是操作文件,那就得有操作文件的方法,一般而言,我们对文件的需求无非就两个:读、写。

但对于文件而言,我们还需要两个必要的步骤:打开、关闭。

想来这应该也不难理解,就和你操作电脑一样,操作之前你总得先打开电脑,操作结束之后一般都会合上电脑,或者直接关闭电脑。

所以总结下来就三个步骤:

  1. 打开文件
  2. 读写操作
  3. 关闭文件

你所有对文件的操作,都应该在打开文件关闭文件之间进行。

1.C语言方式

知道了基本的步骤,我们就可以开始写代码了。

首先还是老步骤,解决方案中新建一个day4的控制台空项目,将该项目设置为启动项,然后添加一个main.cpp的源文件,代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
int main() {
	FILE *f = fopen("1.txt", "w+"); //用读写模式打开1.txt文件
	const char *wBuf="Hello world"; //要写入文件的字符串
	fwrite(wBuf,1,12,f); //将wBuf指定的内容写入文件中
	char rBuf[13];  //申请一块13字节的字符串数组,用于存字符

	fseek(f, 0, SEEK_SET); //将文件指针移动到文件头部

	fread(rBuf, 1, 12, f); //将文件中的字符读出来到rBuf中
	fclose(f);
	std::cout << rBuf << "\n"; //输出字符
}

运行结果:

image-20231128083222082

然后找到我们代码中读写的1.txt文件:

image-20231128083536449

打开文件1.txt

image-20231128083613234

就可以发现我们确实写进去了,下面开始解释上面各个操作的意思。

首先是代码中定义了一个宏,前面说过,一些函数被VS认为是不安全的,建议咱别用,但我们可以通过定义某些宏来告诉VS:我们就要用,你别管。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux