因为我只是简单对比了windows核心编程上面四种读写方式的快慢,所以,对于重叠部分的考虑,只是简单的对半划分,没有深加工
// ReadFileByTwoBuffer.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<Windows.h>
int main()
{
DWORD ReturnLength;
BOOL IsOK = FALSE;
char* v1=0;
DWORD v2;
DWORD Start, End;
Start = GetTickCount();
HANDLE FileHandle = CreateFile(L"E:/862.exe", GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (FileHandle == INVALID_HANDLE_VALUE)
{
printf("创建文件对象失败:%d ", GetLastError());
return 0;
}
char*VirtualAlloc_1 = (char*)VirtualAlloc(NULL, 1024 * 1024 * 545, MEM_COMMIT, PAGE_READWRITE);
IsOK = ReadFile(FileHandle, VirtualAlloc_1, 1024 * 1024 * 545, &ReturnLength, NULL);
if (IsOK == TRUE)
{
//v1 = strstr(VirtualAlloc_1, VirtualAlloc_1);
printf("%d
", ReturnLength);
//printf("%s
", v1);
}
v2 = SetFilePointer(FileHandle, -1024*1024*500, 0, FILE_END);//有符号值的低位32位,指定要移动文件指针的字节数。
// lDistanceToMove的正值在文件中向前移动文件指针,负值将文件指针移回。
char*VirtualAlloc_2 = (char*)VirtualAlloc(NULL, 1024*1024*545, MEM_COMMIT, PAGE_READWRITE);
IsOK = ReadFile(FileHandle, VirtualAlloc_2, 1024 * 1024 * 545, &ReturnLength, NULL);
if (IsOK == TRUE)
{
//v1 = strstr(VirtualAlloc_2, VirtualAlloc_2);
printf("%d
", ReturnLength);
//printf("%s", v1);
}
End = GetTickCount();
printf("time=%d
", End - Start);
getchar();
return 0;
}