内存文件映射!

#include <windows.h>
#include <iostream>

using namespace std;

int main()
{
	HANDLE hFile;
	HANDLE hFileMap;

	hFile = ::CreateFile("d:\\test.txt",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

	if( hFile != INVALID_HANDLE_VALUE )
	{
		hFileMap = ::CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL);
		if( hFileMap != NULL )
		{
			SYSTEM_INFO sysinfo;
			DWORD dwFileSizeHigh;
			GetSystemInfo(&sysinfo);
			DWORD dwGran = sysinfo.dwAllocationGranularity;

			__int64 FileSize= ::GetFileSize(hFile,&dwFileSizeHigh);
			FileSize |= (((__int64)dwFileSizeHigh) << 32);

			::CloseHandle(hFile);

			__int64 qwFileOffset = 0;
			DWORD dwBlockBytes = 1000*dwGran;

			if(FileSize < 1000*dwGran)
				dwBlockBytes = (DWORD)FileSize;
			while( FileSize > 0 )
			{
				LPBYTE lpbAddress = (LPBYTE)::MapViewOfFile(hFileMap,FILE_MAP_ALL_ACCESS,(DWORD)(qwFileOffset>>32),
					(DWORD)(qwFileOffset&0xFFFFFFFF),dwBlockBytes);

				if( lpbAddress == NULL )
				{
					return -1;
				}

				for(DWORD i=0;i < dwBlockBytes; i++)
				{
					BYTE temp = *(lpbAddress+i);
					cout << temp;
					*(lpbAddress+i) = 'B';
				}

				UnmapViewOfFile(lpbAddress);

				qwFileOffset += dwBlockBytes;
				FileSize -= dwBlockBytes;
			}
		}
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值