菜鸟提问:C++实现文件读写速度测试迷茫?

panzekai 2010-07-08 11:20:37
本人想要在嵌入式平台下测试SD卡中文件读写速度测试,设想把SD卡内的文件读或是写到一个缓冲区中buffer后丢弃,不断读写直到整个文件读写完成,计算整个过程使用的时间,文件大小已知就可以得出速度大小。本人尝试两种方法都存在问题,现把代码贴出来,希望大家给我看看那里错了,本人不胜感激!
FILE* file = NULL ;
DWORD Tick1,Tick2,Tick3,Tick4;
CHAR buf[512];
file = fopen("\\Storage Card\\10M.bin\\10M.bin", "r+t");
Tick1=GetTickCount(); // gets current time
if(file)
{
int num = 1;
while (num)
{
memset(buf,0,512);
num = fread(buf,sizeof(CHAR),512,file);
fclose( file );
Tick2=GetTickCount()-Tick1;
RETAILMSG(1,
(TEXT("shijiancha1 = %d \n"),Tick2));

}
}
本程序测试时不能实现整个文件读的。本人又模仿msdn编写下面一个,还是不行。
FILE *stream;
DWORD Tick1,Tick2,Tick3,Tick4;
char list[512];
int i, numread, numwritten;
CFile strFileR;

/* Open file in text mode:*/
if( (stream = fopen("\\Storage Card\\10M.bin", "r+t" )) != NULL )
{
Tick1=GetTickCount(); // gets current time
/* Write 512 characters to stream */
numwritten = fwrite(list, sizeof(list), strFileR.GetLength()+1, stream );
fclose( stream );
Tick2=GetTickCount()-Tick1;
RETAILMSG(1,
(TEXT("shijiancha1 = %d \n"),Tick2));
}
else
printf( "Problem opening the file\n" );

if( (stream = fopen("\\Storage Card\\10M.bin", "r+t" )) != NULL )
{
Tick4=GetTickCount(); // gets current time
/* Attempt to read in 512 characters */
numread = fread(list, sizeof(list), strFileR.GetLength()+1, stream );
RETAILMSG(1,
(TEXT("numread = %d \n"),numread));
RETAILMSG(1,
(TEXT("list = %d \n"),list));
fclose( stream );
Tick3=GetTickCount()-Tick4;
RETAILMSG(1,
(TEXT("shijiancha3 = %d \n"),Tick3));
}
else
printf( "File could not be opened\n" );
l两个程序反馈回来的和我实际设想的差距太大,结果存在明显错误,劳烦大家帮我看看,提供宝贵建议,再次感谢!
...全文
129 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
panzekai 2010-07-12
[Quote=引用 1 楼 honglinonline 的回复:]
把fclose( stream );或者fclose( file );
放到循环的外部就可以了。
你这样写,只读取了一次,之后就关闭了文件,之后没有打开,所以就读不了了
[/Quote]

本人按照把fclose( stream );或者fclose( file )放到循环的外部还是不可以,测试出来的事件明显不服,是不是fread和fwrite的参数有设置错误的地方,迷茫!麻烦大家再给我看看,谢谢了!
回复
Snovate 2010-07-11
[Quote=引用 1 楼 honglinonline 的回复:]

把fclose( stream );或者fclose( file );
放到循环的外部就可以了。
你这样写,只读取了一次,之后就关闭了文件,之后没有打开,所以就读不了了
[/Quote]
顶一个
回复
jerkey_1999 2010-07-11
LS说得对。
就是关闭文件太早了。
当然也可以每读写一次就打开和关闭文件一次,但是这样很不好,影响速度而且需要定位读写的位置。
回复
honglinonline 2010-07-09
把fclose( stream );或者fclose( file );
放到循环的外部就可以了。
你这样写,只读取了一次,之后就关闭了文件,之后没有打开,所以就读不了了
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告