读取文件的两种类型

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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的大象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值