两种方式读文件大小不一样?

jackind 2005-11-01 01:06:56
BYTE *buf = new BYTE[1024];
BYTE nRead;
BYTE nSum=0;
{
nRead = file.Read(buf,1024);
if(nRead > 0)
{
nSum = nSum + nRead;
}
}while(nRead == 1024);
怎么跟我用
FILE * fp = fopen( strPathAndFile, "rb" );
if ( fp )
{
long sum = 0;
for ( sum = 0; !feof( fp ); sum += fgetc( fp ) ) ;
读出来的文件不一样大?上面的怎样修改可以让读的字节数一样?
...全文
187 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackind 2005-11-01
  • 打赏
  • 举报
回复
不一样也结了,没意思~~
估计用这样的办法读的字节数是不一样的,也许是单位上我给搞错了!!
jackind 2005-11-01
  • 打赏
  • 举报
回复
还没下班,不能打球啊,想打篮球~~
还有个不幸的消息,还是不一样

Snow_Ice11111 2005-11-01
  • 打赏
  • 举报
回复
准备打排球去了,第二种方法的问题抽空再回答。
菜牛 2005-11-01
  • 打赏
  • 举报
回复
低位在前,高位在后知道吧?
Snow_Ice11111 2005-11-01
  • 打赏
  • 举报
回复
第一种读取文件方法错误多多,我改了一下:


#include <iostream.h>
#include <afx.h>

void main()
{
//下面是第一种读取文件方法
CFile file;
file.Open("e:\\test.txt",0); //这里可以根据你的情况改成strPathAndFile
BYTE *buf = new BYTE[1025]; //多申请一个空间来放结束符
long nRead; //改成long类型
long nSum=0; //同上
nRead=file.Read(buf,1024);
//这里的判断条件也改了,因为最后一次读出的长度不一定刚好是1024个字节
while (0!=nRead)
{
nSum+=nRead;
nRead=file.Read(buf,1024);
}
file.Close();
delete buf;
buf=NULL;
cout<<nSum<<endl;


}
jackind 2005-11-01
  • 打赏
  • 举报
回复
不行不行,还是不一样大!!怎样解决低八位为0呢?因为nSum的值经过strChkSum.Format(_T("%X"),nSum)转换后,strChkSum的值最后面两位有很多都是00,是不是低八位的关系??
ddmor 2005-11-01
  • 打赏
  • 举报
回复
to Mackz(在相互):
呵呵,还好,这个程序不是死循环,反而还让人更迷糊呢。
ddmor 2005-11-01
  • 打赏
  • 举报
回复
你把计数器的类型由byte该为int类型试试,不然while(nRead == 1024)其实是等效于while(nRead == 0),因为将1024强制转换为byte类型的数值时,其实留下低8位字节值为0。
菜牛 2005-11-01
  • 打赏
  • 举报
回复
BYTE *buf = new BYTE[1024];
BYTE nRead;
BYTE nSum=0;
{
nRead = file.Read(buf,1024);
if(nRead > 0)
{
nSum = nSum + nRead;
}
}while(nRead == 1024); //死循环?
jackind 2005-11-01
  • 打赏
  • 举报
回复
还是不一样,差的远了,同一个文件上面的读出来是25948,下面的方法读出是433,怎么办?
Snow_Ice11111 2005-11-01
  • 打赏
  • 举报
回复
Sorry,前一种最大应该是256个字节大小。


BYTE nRead;
BYTE nSum=0;
改成:
long nRead;
long nSum=0;
结果就一样了。
Snow_Ice11111 2005-11-01
  • 打赏
  • 举报
回复
哦,错了。后一种long应该是2G大小。
Snow_Ice11111 2005-11-01
  • 打赏
  • 举报
回复
当然了,第一种你用的统计变量用的是BYTE类型,最多只能到64K大小,后一种是long类型,最大可达4G,文件小的时候(64K以下)都一样,超过后前一种就有问题了(溢出)。
redjuly 2005-11-01
  • 打赏
  • 举报
回复
注意 FILE * fp = fopen( strPathAndFile, "rb" );
第一种方法也是设定了二进制读么?
如果不是可能不一样
把 FILE * fp = fopen( strPathAndFile, "rb" );
改成 FILE * fp = fopen( strPathAndFile, "r" );试试看??

16,472

社区成员

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

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

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