在一个函数中有如下代码
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中通过。
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中通过。
我试了一下,不是全局或局部变量的问题,把文件对象做参数使用后,问题解决
只可能说是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;
}
FileSize=Rfile->Read(buffer,FileLength);//FileSize是读取的字节数...函数也是微软的..