【滴水三期】文件内存读写作业——读取notepad.exe

#include <stdio.h>
#include <windows.h>
#include <time.h>

//文件名称
const char file_name[] = "C:\/Windows\/System32\/notepad.exe";
//开辟堆区首地址
char* process_content_buff;
//每次传输大小
int count = 1023;
//总计传输多少次
int n = 0;

char* generateRandomFileName(char* prefix) {
	// 初始化随机数种子 
	srand(time(NULL));
	char* randomFileName = (char*)malloc(strlen(prefix) + 20 * sizeof(char));
	// 预留足够空间 
	if (randomFileName == NULL) {
		printf("Memory allocation failed\n");
		exit(EXIT_FAILURE);
	}
	// 使用当前时间戳和随机数生成文件名 
	time_t t = time(NULL);
	struct tm now;
	localtime_s(&now, &t);
	//sprintf(randomFileName, "%s_%d%02d%02d_%02d%02d%02d_%ld.txt", prefix, now.tm_year + 1900, now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec, rand());
	sprintf_s(randomFileName, MAX_PATH, "%s_%d%02d%02d_%02d%02d%02d_%ld.txt", prefix, now.tm_year + 1900, now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec, rand());
	return randomFileName;

}

int ProcessRead() {

	FILE* pfile = NULL;
	int ferr = fopen_s(&pfile, file_name, "rb");
	//获取文件指针

	//获取文件大小
	fseek(pfile, 0, SEEK_END);
	int pfile_size = ftell(pfile);

	//文件指针回到开始位置
	rewind(pfile);

	//申请内存
	process_content_buff = (char*)calloc(pfile_size, 1);

	char* buffer_cache = process_content_buff;
	//count = (pfile_size / count) + 1;
	n = (pfile_size / count) + 1;
	//if (pfile_size / count)
	//{
	//	n = (pfile_size / count) + 1;
	//	//没有整传,剩余部分大小
	//	return pfile_size % count;
	//}
	//else
	//{
	//	n = pfile_size / count;
	//}

	//读取文件到内存buff中,count 值怎么求?,没有必要分块传输
	while (n--) {
		size_t fsize = fread(buffer_cache, 1, count, pfile);
		buffer_cache = buffer_cache + count;
		printf("读取fsize个字节%d\n", fsize);
	}

	FILE* w_pfile = NULL;
	char* fileName = generateRandomFileName((char*)"file");
	fopen_s(&w_pfile, fileName, "wb");
	fwrite(process_content_buff, 1, pfile_size, w_pfile);


	fclose(pfile);
	free(process_content_buff);
	free(buffer_cache);

	return (int)&process_content_buff;
}
int main() {
	int pro_mem;
	//返回内存编号
	pro_mem = ProcessRead();
	/*printf("%p",pro_mem);*/

	return 0;
}

学后感:滴水三期的课已经刷完一遍了,现在处于啥都知道点,但是具体下来发现什么也不会。当时学的第一遍的时候也没有跟着做作业,越学到后面的时候就会发现基本都是之前的知识,真是印证了那句话:【基础不牢,地动山摇】本末倒置了。感觉自己代码功底特差,在从头学一遍PE,先从文件读写开始,代码重头敲起来。

很多细节发到这里感觉太乱了,就没有发了。学到这里的同学有什么不明白的可以来问我,知无不言言无不尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值