先贴代码
//
// 文件映射操作
//
printf("Print Any Key To CreateFile\r\n");
getchar();
HANDLE hFile = CreateFile(
L"TempFile.txt",
GENERIC_ALL,
FILE_SHARE_READ,
NULL,CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile != NULL && hFile != INVALID_HANDLE_VALUE)
{
printf("CreateFile Success\r\n");
CHAR szWriteBuffer[0x100] = {0};
for(int i =0 ;i < 0x100 - 1;i ++)
{
szWriteBuffer[i] = i % 10 + 0x6a;
}
DWORD dwHasWrite;
printf("Print Any Key To WriteFile\r\n");
getchar();
if(WriteFile(hFile,szWriteBuffer,0x100,&dwHasWrite,NULL))
{
printf("WriteFile Success :%d\r\n",dwHasWrite);
FlushFileBuffers(hFile);
//CloseHandle(hFile);
//Sleep(0x1000);
/*hFile = CreateFile(
L"TempFile.txt",
GENERIC_ALL,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hFile != NULL && hFile != INVALID_HANDLE_VALUE)
{
printf("CreateFile Success\r\n");
}
else
{
printf("CreateFile Error :%d\r\n",GetLastError());
getchar();
getchar();
return 0;
}*/
char szReadBuffer[0x100] = {0};
DWORD dwHasRead = 0;
SetFilePointer(hFile,0,0,FILE_BEGIN);
// 移动文件的指针的位置才能正确的读取文件,否则可能失败
while(dwHasRead == 0)
{
printf("Print Any Key To Read File\r\n");
getchar();
if(ReadFile(hFile,szReadBuffer,0x200,&dwHasRead,NULL))
{
printf("ReadFile Success :%d\r\n",dwHasRead);
if(dwHasRead == dwHasWrite)
{
if(memcmp(szWriteBuffer,szReadBuffer,0x100))
{
printf("不一样\r\n");
printf("szReadBuffer:%s\r\nszWriteBuffer:%s\r\n",szReadBuffer,szWriteBuffer);
}
else
{
printf("一样\r\n");
}
}
else
{
printf("读取数据不够???\r\n");
printf("szReadBuffer:%s\r\n",szReadBuffer);
}
}
else
{
printf("ReadFile Error :%d",GetLastError());
}
}
}
else
{
printf("WriteFile Error :%d",GetLastError());
}
printf("Print Any Key To DeleteFile\r\n");
getchar();
CloseHandle(hFile);
DeleteFile(_T("TempFile.txt"));
// rename(szWriteBuffer)
}
else
{
printf("CreateFile Error :%d",GetLastError());
}
- 问题的关键是,在刚刚进行了WriteFile 之后,文件指针指向文件末尾,导致读取操作失败,重新设置文件指针即可