菜鸟提问: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两个程序反馈回来的和我实际设想的差距太大,结果存在明显错误,劳烦大家帮我看看,提供宝贵建议,再次感谢!
...全文
170 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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 );
放到循环的外部就可以了。
你这样写,只读取了一次,之后就关闭了文件,之后没有打开,所以就读不了了

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧