读取文件的两种类型

来源:互联网 发布:金融学中的优化方法 编辑:程序博客网 时间:2024/05/16 08:29
int hugefile_rw(CString strFilePath){clock_t start, finish;//------------------------------------------------------内存映射方法;start = clock();//创建或打开文件内核对象;HANDLE fileH = CreateFile(strFilePath.GetBuffer(0),  GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  if(fileH == INVALID_HANDLE_VALUE){cout<<"error in CreateFile"<<endl;return -1;}//创建一个文件映射内核对象;HANDLE mapFileH = CreateFileMapping( fileH,NULL,PAGE_READWRITE,0,0,TEXT("Resource")); if(mapFileH == NULL){cout<<"error in CreateFileMapping"<<endl;return -1;}//将文件数据映射到进程的地址空间;char * mapH = (char *)MapViewOfFile( mapFileH, FILE_MAP_ALL_ACCESS,0,0, 0); if(mapH == NULL){cout<<"error in MapViewOfFile"<<endl;return -1;}std::string buffer = mapH;//读取数据;char *buf = mapH;double k;int times = 300000*34;//关闭句柄;UnmapViewOfFile(mapH); CloseHandle(mapFileH); CloseHandle(fileH); finish = clock();//打印耗时;double d1 = (double)(finish - start)/ CLOCKS_PER_SEC;//------------------------------------------------------传统方法;start = clock();FILE *fp = fopen("D:\\code\\棋牌代码\\MDY棋牌项目\\运行\\debug\\unicode--2010\\res\\AllCityData.ini","r");if(fp == NULL){cout<<"error in fopen"<<endl;return -1;}for(int i = 1 ;i <= times; i++){fscanf(fp,"%lf",&k);}fclose(fp);finish = clock();double d2 = (double)(finish - start)/ CLOCKS_PER_SEC;}
以上两种方式, 内存方式比传统方式速度快很多。
0 0
原创粉丝点击