📄 disknt.cpp
字号:
#include <afxwin.h>
#define BLOCKSIZE 4096
char drive[15];
char fillchar = 'm';
int filesize;
UINT blocksize = BLOCKSIZE;
char buffer[BLOCKSIZE];
char dummy[BLOCKSIZE];
HANDLE fh=NULL;
char filename[MAX_PATH];
int file_error=0;
void OkMsgBox (char *szCaption, char *szFormat,...)
{
char szBuffer [256] ;
char *pArguments ;
pArguments = (char *) &szFormat + sizeof (szFormat) ;
vsprintf (szBuffer, szFormat, pArguments) ;
MessageBox (GetActiveWindow(), szBuffer, szCaption, MB_OK) ;
}
void diskio0(void) //create file
{
DWORD SectorsPerCluster;
DWORD BytesPerSector;
DWORD FreeClusters;
DWORD Clusters;
char root[15];
file_error=0;
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
// OkMsgBox("DEBUG","drive passed is <%s>",drive);
strcpy(root,drive);
strcat(root,"\\");
BOOL bOK=GetDiskFreeSpace(root, &SectorsPerCluster, &BytesPerSector,
&FreeClusters, &Clusters);
if(!bOK) {
MessageBeep(0);
OkMsgBox("DISKIO0","Could not access Drive %s",root);
file_error=12;
return;
}
if(FreeClusters*SectorsPerCluster*BytesPerSector<blocksize*filesize) {
MessageBeep(0);
OkMsgBox("DISKIO0","Insufficient Space on Drive %s",drive);
file_error=10;
return;
}
UINT num=GetTempFileName(drive,"mhtest",0,filename);
if(num==0) {
MessageBeep(0);
DWORD error=GetLastError();
TRACE("DISKIO0: attempt to create temporary file %s, ERROR %d\n",filename,error);
OkMsgBox("DISKIO0","Could not create temporary file %s, error %d",filename,error);
file_error=1;
return;
}
TRACE("DISKIO0: drive %s,filename %s\n",drive,filename);
ASSERT(num>0);
ASSERT(strlen(filename)>4);
fh=CreateFile(filename,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
//NOTE: the CreateFile call above uses OPEN_EXISTING rather than CREATE_NEW
// because GetTempFileName actually creates the empty file
// Using CREATE_NEW generates an invalid handle value with ERROR_FILE_EXISTS (80)
ASSERT(fh);
if(fh==INVALID_HANDLE_VALUE) {
MessageBeep(0);
DWORD error=GetLastError();
TRACE("DISKIO0: attempt to open file %s, ERROR %d\n",filename,error);
OkMsgBox("DISKIO0","Could not open file %s, error %d",filename,error);
file_error=2;
}
else
TRACE("DISKIO0: opened file %s,to write %d of %d\n",filename,filesize,blocksize);
}
void diskio1(void) //sequential write test
{
int i;
BOOL flag=TRUE;
DWORD written;
if(file_error) return;
SetFilePointer(fh,0,0,FILE_BEGIN);
for(i=0;i<filesize && flag;i++) {
flag=WriteFile(fh,buffer,blocksize,&written,NULL);
}
if(!flag) {
MessageBeep(0);
DWORD error=GetLastError();
TRACE("DISKIO1: could not write block %d, error %d\n",i,error);
OkMsgBox("Sequential Write Test","Could not write block %d, error %d",i,error);
file_error=3;
}
else {
TRACE("DISKIO1: wrote %d blocks normally, blocksize %d\n",i,blocksize);
}
}
void diskio2(void) //sequential read test
{
int i;
BOOL flag=TRUE;
DWORD read;
if(file_error) return;
SetFilePointer(fh,0,0,FILE_BEGIN);
for(i=0;i<filesize && flag;i++) {
flag=ReadFile(fh,buffer,blocksize,&read,NULL);
}
if(!flag) {
MessageBeep(0);
TRACE("DISKIO2: could not read block %d\n",i);
OkMsgBox("Sequential Read Test","Could not read block %d",i);
file_error=5;
}
}
void diskio3(void) //random write test
{
int i;
BOOL flag=TRUE;
DWORD written;
long fp1=0L,fp2=0L;
if(file_error) return;
for(i=0;i<filesize && flag;i++) {
fp1=long(rand()*float(filesize-1)/RAND_MAX*blocksize);
//TRACE("DISKIO3: block %ld\n", fp1);
SetFilePointer(fh,fp1,&fp2,FILE_BEGIN);
flag=WriteFile(fh,buffer,blocksize,&written,NULL);
}
if(!flag) {
MessageBeep(0);
TRACE("DISKIO3: could not write %dth block(offset %ld)\n",i,fp1);
OkMsgBox("Random Write Test","Could not write %dth block(offset %ld)",i,fp1);
file_error=7;
}
}
void diskio4(void) //random read test
{
int i;
BOOL flag=TRUE;
DWORD read;
long fp1=0L,fp2=0L;
if(file_error) return;
for(i=0;i<filesize && flag;i++) {
fp1=long(rand()*float(filesize-1)/RAND_MAX*blocksize);
//TRACE("DISKIO4: block %ld\n", fp1);
SetFilePointer(fh,fp1,&fp2,FILE_BEGIN);
flag=ReadFile(fh,buffer,blocksize,&read,NULL);
}
if(!flag) {
MessageBeep(0);
TRACE("DISKIO4: could not read %dth block(offset %ld)\n",i,fp1);
OkMsgBox("Random Read Test","Could not read %dth block(offset %ld)",i,fp1);
file_error=9;
}
}
void diskio5(void) //close and delete file
{
CloseHandle(fh);
DeleteFile(filename);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -