下载一个文件的时候,想让它边下载边显示一个进度.即下载了百分之多少.我在接收的Socket接收到文件后,让它与总文件长度进行比较,然后设置Edit的显示值.但是显示的时候不是从0%到100%.最大只到了30多点,然后就变成负的,-30左右,然后一直减到0,再增加到30左右,然后完毕..long igDownLoadTotalFileLens;   //总共需要下载的文件总长度
long igHaveDownFileLens;      //当前已经下载的文件长度
long igFileDownBiLi;  //下载的文件占总的百分比
char strFileDownBiLi[255];; //文件下载百分比下面是显示的几步..
igFileDownBiLi = igHaveDownFileLens*100/igDownLoadTotalFileLens;   //已下载文件比例
itoa(igFileDownBiLi, strFileDownBiLi, 10);
strcat(strFileDownBiLi,"%");
m_tempDlg->GetDlgItem(IDC_EDITSTATUS)->SetWindowText(strFileDownBiLi);比如文件是64M,跟的时候下载文件长度到总文件长度3分之1左右的时候,strFileDownBiLi就会第一位成负号了.这个是因为什么呢?

解决方案 »

  1.   

    因为你的程序有溢出的情况。
    你的文件大小是64M,那么1/3就是21M左右,由于你这行代码:
    igFileDownBiLi = igHaveDownFileLens*100/igDownLoadTotalFileLens
    中,先将一个long类型乘以100,这将导致溢出!因为乘以100后,21M就变成了2100M,而long型的最大值为
    2147483647,即2100M左右,所以就变成了负数。
    解决办法,将此句修改为:
    igFileDownBiLi = igHaveDownFileLens*1.0/igDownLoadTotalFileLens*100;这样可以避免溢出发生