在一个函数中有如下代码
void CMyDlg::BackFile()
{
if(file2.Open(m_PathName+_T(".bak"),CFile::modeWrite|CFile::modeCreate,&e)==0)
{
e.ReportError();
return;
}
str1+=str2;
FileLength=file1.GetLength();         //取得文件大小
buffer=new char [FileLength];
FileSize=file1.Read(buffer,FileLength);//FileSize变量值与FileLength不一样,
file2.Write(buffer,FileSize);          //备份
file2.Close();
delete buffer;
}若在函数调用部份,用函数体代替,就不会出现变量FileSize与FileLength不一样的问题,问,为何用函数调用,和一个不用函数调用,会出现这样的问题其中代码在Win2000 VC6中通过。

解决方案 »

  1.   

    文件大小没有FileLength那么大,filesize只返回实际读取数据大小。
      

  2.   

    谢谢楼上几位
    我试了一下,不是全局或局部变量的问题,把文件对象做参数使用后,问题解决
    只可能说是Read()函数内部问题了,可能只有微软才具体知道原因了修改代码如下:void CIGameDlg::BackFile(CFile *Rfile,CFile *Bfile)
    {
    if(Bfile->Open(m_PathName+_T(".bak"),CFile::modeWrite|CFile::modeCreate,&e)==0)
    {
    e.ReportError();
    return;
    }
    str1+=str2;
    FileLength=Rfile->GetLength();         //取得文件大小
    buffer=new char [FileLength];
    FileSize=Rfile->Read(buffer,FileLength);
    Bfile->Write(buffer,FileSize);          //备份
    Bfile->Close();
    delete buffer;
    }
      

  3.   

    顶楼那位, 变量FileLength与FileSize的值应说在正常情况下是一致的..FileLength=Rfile->GetLength();     //变量FileLength是文件的大小...函数是微软的    
    FileSize=Rfile->Read(buffer,FileLength);//FileSize是读取的字节数...函数也是微软的..