读写文件

一、打开文件

FILE *pF = fopen("c:/notepad.exe","rb");
FILE *pW = fopen("c:/notepad1.exe","wb");

二、判断打开文件是否失败

if(!pF)
{
	printf("打开文件失败");
	return 0;
}

三、获取文件大小

#include <windows.h>
fseek(pF,0,SEEK_END);		//将指针从开始的位置移动到末尾
DWORD fileSize = ftell(pF);    //指针当前位置相对于文件首的偏移字节数

四、申请内存,并判断是否成功

LPVOID pFileBuffer = malloc(fileSize);
if(!pFileBuffer)
{
	printf("分配空间失败");
	fclose(pF);	//关闭文件
	return NULL;
}

五、初始化分配的内存空间

memset(pFileBuffer,0,fileSize);		

六、将内容读取到内存,并判断是否读取成功

fseek(pF,0,SEEK_SET);	//将指针指向开始
size_t n = fread(pFileBuffer,fileSize,1,pF);	//将数据读取到缓冲区中
if(!n)
{
	printf("读取数据失败");
	free(pFileBuffer);		//释放内存
	fclose(pF);			//关闭文件
	return NULL;
}

七、将内存中的数据写到磁盘

fwrite(pFileBuffer,fileSize,1,pW);

八、释放内存,关闭文件

free(pFileBuffer);
fclose(pF);	
fclose(pW);	

九、完整代码

#include "stdafx.h"
#include "stdlib.h"			
#include <windows.h>

int main(int argc, char* argv[])
{

	//打开文件
	FILE *pF = fopen("c:/notepad.exe","rb");
	FILE *pW = fopen("c:/notepad1.exe","wb");
	if(!pF)
	{
		printf("打开文件失败");
		return 0;
	}

	if(!pW)
	{
		printf("打开文件失败");
		return 0;
	}
	
	
	//获取文件大小
	fseek(pF,0,SEEK_END);		//将指针从开始的位置移动到末尾
	DWORD fileSize = ftell(pF);

			
	//分配缓冲区(申请内存)
	LPVOID pFileBuffer = malloc(fileSize);
	if(!pFileBuffer)
	{
		printf("分配空间失败");
		fclose(pF);	//关闭文件
		fclose(pW);	//关闭文件
		return NULL;
	}


	//将数据读取到内存
	fseek(pF,0,SEEK_SET);	//将指针指向开始
	size_t n = fread(pFileBuffer,fileSize,1,pF);	//将数据读取到缓冲区中
	if(!n)
	{
		printf("读取数据失败");
		free(pFileBuffer);		//释放内存
		pFileBuffer = NULL;  //将指针置于空,以免变成野指针
		fclose(pF);	//关闭文件
		fclose(pW);	//关闭文件
		return NULL;
	}

	//向磁盘写入数据
	size_t z = fwrite(pFileBuffer,fileSize,1,pW);

	if(!z)
	{
		printf("写入数据失败");
		free(pFileBuffer);		//释放内存
		pFileBuffer = NULL;
		fclose(pF);	//关闭文件
		fclose(pW);	//关闭文件
		return NULL;
	}

	//释放内存,关闭文件
	free(pFileBuffer);
	pFileBuffer = NULL;
	fclose(pF);	
	fclose(pW);	

	return 0;
}
posted @ 2021-12-05 23:35  lnterpreter  阅读(25)  评论(0编辑  收藏  举报