一、打开文件
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;
}