CreateFile、ReadFile、WriteFile和fread、fwrite两种读写文件的方法

相关函数的使用可以查看MSDN上的说明文档。本文只提供实例。


程序需包含:#include “Windows.h”文件


方法一、采用:CreateFile、ReadFile、WriteFile


DWORD dwFileSize = 0;

	BYTE* buffer = NULL;

	HANDLE hFile = INVALID_HANDLE_VALUE;

	hFile = CreateFile("D:\\12123.jpg",GENERIC_READ,
		               FILE_SHARE_READ,NULL,OPEN_EXISTING,
					   FILE_ATTRIBUTE_NORMAL,NULL);

	if (hFile == INVALID_HANDLE_VALUE)
	{
		CloseHandle(hFile);

		cout<<"Create File Failed !"<<endl;

		return 0;
	} 
	else
	{
		dwFileSize = GetFileSize(hFile,NULL);

		//LARGE_INTEGER lFileSize;

		//GetFileSizeEx(hFile,&lFileSize);//若文件长度超过0xFFFFFFFF,使用GetFileSizeEx。

		cout<<"文件大小 "<<dwFileSize<<endl;

		buffer = new BYTE[dwFileSize];

		if (buffer == NULL)
		{
			cout<<"Create buffer error !"<<endl;
	        
	      return 0;
		}

		ZeroMemory(buffer,dwFileSize);

		DWORD dwReadSize = 0,dwReadTotal = 0;

		while (dwReadTotal < dwFileSize)
		{
			ReadFile(hFile,buffer + dwReadTotal,dwFileSize - dwReadSize,&dwReadSize,NULL);

			dwReadTotal += dwReadSize;
		}

		cout<<"总共读取的文件大小 "<<dwReadTotal<<endl;
	}
	
	hFile = CreateFile("D:\\222.jpg",GENERIC_WRITE,0,NULL,               
		CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

	if (hFile == INVALID_HANDLE_VALUE)
	{
		CloseHandle(hFile);

		cout<<"Create File Failed -2 !"<<endl;

		delete []buffer;

		buffer = NULL;

		return 0;
	} 
	else
	{
		DWORD dwWriteTotal = 0,dwWriteSize = 0;

		while (dwWriteTotal < dwFileSize)
		{
			WriteFile(hFile,buffer + dwWriteTotal,dwFileSize,&dwWriteSize,NULL);

			dwWriteTotal += dwWriteSize;
		}
	}

	delete []buffer;

	buffer = NULL;


方法二、采用fread、fwrite


DWORD dwFileSize = 0;

	WIN32_FIND_DATA FileInfo;

	ZeroMemory(&FileInfo,sizeof(WIN32_FIND_DATA));

	HANDLE hFind = INVALID_HANDLE_VALUE;

	hFind = FindFirstFile("D:\\12123.jpg",&FileInfo); 

	if(hFind != INVALID_HANDLE_VALUE) 
	{
		dwFileSize = FileInfo.nFileSizeLow ;
	}

	FindClose(hFind);

	BYTE* buffer = new BYTE[dwFileSize];

	if (buffer == NULL)
	{
		cout<<"Create buffer error !"<<endl;

		return 0;
	}

	ZeroMemory(buffer,dwFileSize);

	FILE *f = NULL;

	fopen_s(&f,"D:\\12123.jpg","rb");

	if (f == NULL)
	{
		delete [] buffer;

		buffer = NULL;

		cout<<"fopen_s error -1 !"<<endl;

		return 0;
	} 
	else
	{
		fread(buffer,dwFileSize,1,f);
	}

	fclose(f);

	f = NULL;

	fopen_s(&f,"D:\\333.jpg","wb");

	if (f == NULL)
	{
		cout<<"fopen_s error -2 !"<<endl;

		return 0;
	}

	if (fwrite(buffer,dwFileSize,1,f) < 1){
		
		cout<<"fwrite error !"<<endl;
	}

	fclose(f);

	f = NULL;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值