刚开始看,有些概念不太明白。再接再励
基本概念
如下是代码:
/*
将结构体写入文件,使用内存映射文件方式将数据读取
*/
#include "windows.h"
#include "stdio.h"
#include "io.h"
#include "fcntl.h"
#include "string.h"
#include "stdlib.h"
typedef struct testData
{
char szName[16];
int iHashValue;
}TestData;
TestData stTestData;
//准备数据写入文件中
int writeDataToFile()
{
int ifp = -1;
ifp = _open("c://test.data",_O_CREAT|_O_BINARY|_O_RDWR);
char tmp[8] = {0};
for (int i=0; i<30 && ifp != -1; i++)
{
strcpy(stTestData.szName,itoa(i,tmp,10));
stTestData.iHashValue = i;
_write(ifp,&stTestData,sizeof(stTestData));
}
if (ifp != -1)
_close(ifp);
ifp = -1;
return 0;
}
//读取数据显示在界面中
int ReadDataFormFile()
{
int ifp = -1;
ifp = _open("c://test.data",_O_BINARY|_O_RDWR);
while (!eof(ifp))
{
_read(ifp,&stTestData,sizeof(stTestData));
printf("%s/n%d/n-----/n",stTestData.szName,stTestData.iHashValue);
}
if (ifp != -1)
_close(ifp);
ifp = -1;
return 0;
}
//使用内存映射文件读取数据
int ReadDataUserMemoryMapping()
{
//打开要映射的文件
HANDLE hFile = CreateFile("c://test.data",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Read file err......");
return -1;
}
//创建内存映射对象
HANDLE hMap = CreateFileMapping(hFile,NULL,PAGE_READONLY,NULL,NULL,NULL);
//映射整个BMP文件对内存,返回这块内存的首地址
LPVOID lpBase = MapViewOfFile(hMap,FILE_MAP_READ,0,0,0);
TestData arrTestData[3];
//获得文件中的内容
for (int i=0; i<10; i++)
{
//CopyMemory(&stTestData,(BYTE*)lpBase+sizeof(TestData)*i,sizeof(TestData));
CopyMemory(arrTestData,(BYTE*)lpBase+sizeof(TestData)*i*3,sizeof(TestData)*3);
for (int j=0;j<3;j++)
printf("%s/n%d/n-----/n",arrTestData[j].szName,arrTestData[j].iHashValue);
}
UnmapViewOfFile(lpBase);
CloseHandle(hMap);
CloseHandle(hFile);
return 0;
}
//使用内存映射文件将数据读取
int main()
{
writeDataToFile();
ReadDataFormFile();
//
ReadDataUserMemoryMapping();
}