#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;
}