⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readwritetest.cpp

📁 在某一目录下创建文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	lpcFolder=&m_folder;
	int j=m_folder.GetCurSel();
	
	lpcFolder->GetLBText(lpcFolder->GetCurSel(),strfoldername);
	lpcBufferSize->GetLBText(lpcBufferSize->GetCurSel(),strTemp);
	nbuffersize=_wtoi(strTemp);
	lpcFileSize->GetLBText(lpcFileSize->GetCurSel(),strTemp);
	nfilesize=_wtoi(strTemp);
	if (nfilesize==0)
		nfilesize=1;
	if (nbuffersize==0)
		nbuffersize=32;
	buffersize=nfilesize*1024;
	nloop=nbuffersize*1024/nfilesize;
	Totalsize=nloop*buffersize;
	//GetDlgItemText(IDC_NAME,strName);
	SetDlgItemText(IDC_WRITE,L"");
	SetDlgItemText(IDC_READ,L"");
	//msg.Format(L"Totalsize=%d Buffersize=%d",Totalsize,buffersize);
	//SetStatus(msg);
	buffer=(PBYTE) LocalAlloc(LPTR,buffersize);
	if(NULL == buffer){
		msg.Format(L"CreateWrite Failure!...");
		AfxMessageBox(msg);
		RETAILMSG( 1, (TEXT("NULL == buffer \r\n")));
	}
	strName.Format(TEXT("%s"),strfoldername);
	wsprintf(strfoldername,L"\\%s\\testfile",strName);
	//DeleteFile(strfoldername);
	memset(buffer,0x0,buffersize);	

    hRead=CreateFile(strfoldername,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_NO_BUFFERING,NULL);
	if (hRead==INVALID_HANDLE_VALUE )
	{
		msg.Format(L"CreateWrite Failure!...");
//		SetStatus(msg);
		AfxMessageBox(msg);
		goto EXIT;
	}

	for (i=0;i<100;i++)
	{
		memset(buffer,0x0,buffersize);

		DWORD dwRandom = Random();
		dwRandom %= Totalsize;
		if( Totalsize-dwRandom<buffersize)
			dwRandom-=buffersize;

		QueryPerformanceCounter( &liCounterStart );
		if( 0xFFFFFFFF == SetFilePointer (hRead, dwRandom, NULL, FILE_BEGIN)){
			msg.Format(L"SetFilePointer Failure!...");
	//		SetStatus(msg);
			AfxMessageBox(msg);
			goto EXIT;	
		}

		err=ReadFile(hRead,buffer,buffersize,&pBytesReturned,NULL);
		QueryPerformanceCounter( &liCounterEnd );

		if( 0 == err )
		{
			RETAILMSG( 1, (TEXT("ReadFile Failed: %x \r\n"),GetLastError()));
			goto EXIT;
		}

		BYTE bTemp = (BYTE)*buffer;
		for(int j=0;j<buffersize;j++){
			if( *(buffer+j) !=(BYTE)(j+bTemp))
			{
				RETAILMSG( 1, (TEXT("*(buffer+j) %x \r\n"),*(buffer+j)));
				RETAILMSG( 1, (TEXT("(BYTE)(j+bTemp) %x \r\n"),(BYTE)(j+bTemp)));
				msg.Format(L"ReadFile not equal with write Failure!...");
		//		SetStatus(msg);
				AfxMessageBox(msg);
				goto EXIT;
			}
		}

		if( liCounterEnd.QuadPart < liCounterStart.QuadPart){
			msg.Format(L"liCounterEnd.QuadPart < liCounterStart.QuadPart!...");
		//	SetStatus(msg);
			AfxMessageBox(msg);
			goto EXIT;
		}
		else{
			liTotalCounter = liCounterEnd.QuadPart - liCounterStart.QuadPart;
			//RETAILMSG( 1, (TEXT("liTotalCounter %d \r\n"),liTotalCounter));
		}

		dwSpeed = 0;
		dwSpeed = nfilesize*49500000;
		dwSpeed /= liTotalCounter;

		msg.Format(L"%d KB/S",dwSpeed);
		SetDlgItemText(IDC_READ,L"");
		SetDlgItemText(IDC_READ,msg);
		//RETAILMSG( 1, (TEXT("Random read real time speed: %dKB/S \r\n"),dwSpeed));
		TotalSpeed +=dwSpeed;
		Sleep(100);
	}

		dwSpeed = TotalSpeed/100;
		msg.Format(L"%d KB/S",dwSpeed);
		SetDlgItemText(IDC_READ,L"");
		SetDlgItemText(IDC_READ,msg);
//		RETAILMSG( 1, (TEXT("File size:%dMB, Read buffer size:%dKB/S \r\n"),nbuffersize,nfilesize));
		RETAILMSG( 1, (TEXT("Random read average speed: %dKB/S \r\n"),dwSpeed));

//	msg.Format(L"%d KB/S",(Totalsize/nreadtime)*1000/1024);
//	SetDlgItemText(IDC_READ,msg);
//	msg.Format(L"%d KB/S",(Totalsize/nwritetime)*1000/1024);
//	SetDlgItemText(IDC_WRITE,msg);

EXIT:

	CloseHandle(hRead);

	if(buffer){
		LocalFree(buffer);
	}
}
#else
void CWinCE_Bench_IIDlg::WriteReadTest()
{


	UINT64 liTotalCounter1=0;
	UINT64 liTotalCounter2=0;
	LARGE_INTEGER liCounterStart={0,0};
	LARGE_INTEGER liCounterEnd={0,0};
	DWORD dwSpeed=0;


	HANDLE hRead,hWrite;
	DWORD t2,t1,err,pBytesReturned,nCount,i,buffersize;
	CString msg,strName;
	PBYTE buffer=NULL;
	PBYTE buffer2=NULL;
	DWORD nloop,Totalsize,nreadtime,nwritetime;
	CComboBox *lpcFileSize,*lpcBufferSize,*lpcFolder;
	static TCHAR strTemp[10],strfoldername[50];
	CStatic *lpcWrite ;
	char strfilename[50];

	unsigned long nbuffersize,nfilesize;
	lpcWrite=(CStatic*)GetDlgItem(IDC_WRITE);
	//lpcFolder=(CComboBox*)GetDlgItem(IDC_FOLDER);
	lpcBufferSize=(CComboBox*)GetDlgItem(IDC_TOTALSIZE);
	lpcFileSize=(CComboBox*)GetDlgItem(IDC_FILESIZE);
	lpcFolder=&m_folder;
	int j=m_folder.GetCurSel();
	
	lpcFolder->GetLBText(lpcFolder->GetCurSel(),strfoldername);

	SetDlgItemText(IDC_WRITE,L"");
	SetDlgItemText(IDC_READ,L"");


//	buffer=(PBYTE) LocalAlloc(LPTR,32*1024);
	buffer2=(PBYTE) LocalAlloc(LPTR,32*1024);/*
	for(i=0; i<32*1024; i++){
		*(buffer+i) = i;
	}*/
    memset(buffer2,0x0,32*1024);

	strName.Format(TEXT("%s"),strfoldername);
	wsprintf(strfoldername,L"\\%s\\testfile",strName);
//	DeleteFile(strfoldername);
	/*

    hWrite=CreateFile(strfoldername,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
	if (hWrite==INVALID_HANDLE_VALUE )
	{
		msg.Format(L"CreateWrite Failure!...");
//		SetStatus(msg);
		AfxMessageBox(msg);
		return;
	}
	QueryPerformanceCounter( &liCounterStart );	
	err=WriteFile(hWrite,buffer,32*1024,&pBytesReturned,NULL);
	QueryPerformanceCounter( &liCounterEnd );
	if( 0 == err )
	{
		RETAILMSG( 1, (TEXT("WriteFile Failed: %x \r\n"),GetLastError()));
		return;
	}
	if( liCounterEnd.QuadPart < liCounterStart.QuadPart){
		RETAILMSG(1, (TEXT("SDMemReadMultiple error:liCounterEnd.QuadPart < liCounterStart.QuadPart!!\n")) );
		while(1);
	}
	else{
		liTotalCounter1 = liCounterEnd.QuadPart - liCounterStart.QuadPart;
	}

	CloseHandle(hWrite);
	*/
#ifndef _F_LIBRARY_C
	hRead=CreateFile(strfoldername,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_NO_BUFFERING ,NULL);
	if (hRead==INVALID_HANDLE_VALUE )
	{
		RETAILMSG( 1, (TEXT("CreateFile Failed: %x \r\n"),GetLastError()));
		msg.Format(L"CreateStore Failure!...");
		//SetStatus(msg);
		AfxMessageBox(msg);
		goto exit;
	}
	QueryPerformanceCounter( &liCounterStart );
	err=ReadFile(hRead,buffer2,32*1024,&pBytesReturned,NULL);
	QueryPerformanceCounter( &liCounterEnd );
	if( 0 == err )
	{
		RETAILMSG( 1, (TEXT("ReadFile Failed: %x \r\n"),GetLastError()));
		goto exit;
	}
#else
	WideCharToMultiByte(CP_ACP,
		0,
		strfoldername,
		_tcslen(strfoldername),
		strfilename,
		sizeof(strfilename),
		NULL,NULL);

	FILE *file=fopen(strfilename,"r+");
	//if()
	if(file == NULL)
	{
		msg.Format(L"CreateWrite Failure!...");
		AfxMessageBox(msg);
		goto exit;
	}

	QueryPerformanceCounter( &liCounterStart );
	fread(buffer2,1,32*1024,file);
	//RETAILMSG( 1, (TEXT("ReadFile numread: %d \r\n"),numread));
	QueryPerformanceCounter( &liCounterEnd );
#endif

	if( liCounterEnd.QuadPart < liCounterStart.QuadPart){
		RETAILMSG(1, (TEXT("SDMemReadMultiple error:liCounterEnd.QuadPart < liCounterStart.QuadPart!!\n")) );
		while(1);
	}
	else{
		liTotalCounter2 = liCounterEnd.QuadPart - liCounterStart.QuadPart;
		RETAILMSG( 1, (TEXT("liTotalCounter2 %d \r\n"),liTotalCounter2));
	}

	for(i=0; i<32*1024; i++)
	{
		if( (BYTE)i != *(buffer2+i))
		{
			msg.Format(L"error Failure!...");
			while(1);
		}else{
			//RETAILMSG( 1, (TEXT("buffer2 0x%x \r\n"),*(buffer2+i)));
		}
	}
	dwSpeed = 0;
	dwSpeed = 32*49500000;
	dwSpeed /= liTotalCounter2;
	msg.Format(L"%d KB/S",dwSpeed);
	SetDlgItemText(IDC_READ,msg);
	RETAILMSG( 1, (TEXT("dwSpeed %d \r\n"),dwSpeed));
//	dwSpeed = 0;
//	dwSpeed = 32*49500000;
//	dwSpeed /= liTotalCounter1;
//	msg.Format(L"%d count",liTotalCounter2);
//	SetDlgItemText(IDC_WRITE,msg);
	CloseHandle(hRead);

exit:
//	if(buffer)
//	LocalFree(buffer);
	if(buffer2)
	LocalFree(buffer2);
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -