我是用SOCKET和CArchive来传送接受文件的,但文件过大(例如100M)就会出错.提示内容是:"在对一未命名文件进行访问时发生了一个不明错误."
void CMsg::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar<<(WORD)m_bClose;
ar<<m_strText;
ar<<nMax;
if(data!=NULL)
{
   ar.Write(data,nMax);//在此处出错
}
}
else
{
WORD wd;
ar>>wd;
m_bClose=(BOOL)wd;
ar>>m_strText;
ar>>nMax;
if(nMax>0)
{
   data=new byte[nMax];
   nMax=ar.Read(data,nMax);
}
}
m_msgList.Serialize(ar);
}

解决方案 »

  1.   

    缺省得缓冲区8兆,还是分开传输,适当的sleep一下
      

  2.   

    我的建议,不要用这种方法,可控性太低,自己用socket api函数写一个,随你怎么玩。
      

  3.   

    >>缺省得缓冲区8兆
    大夸张了吧,8M,缺省的接收缓冲区: 8192bit 8k发送端是在文件过大的时候会自动分块发送,记住是自动,文件太大的话,在发送端只是会占用一会的100%CPU(如果一次性发送的话)
    所以主要问题是接收端,对文件的访问我个人觉得用API来最好CreateFile,ReadFile,WriteFile就这么简单。
      

  4.   

    to: copy_paste(木石三) 
      能具体些吗?谢谢!!
      

  5.   

    我也是用SOCKET和CArchive来传送接受文件的,主要是图像,有300M,可以接受的到。先准备好一块那么的内存,然后用序列化。但我没用ar.Write(),用的是循环的ar<<。可以实现,出错主要是内存可能没弄对,好好检查一下。