描述:
我的读写文件的代码是这样的,TXT的没有问题,但其他的都不对了。
我是通过串行化CArchive来实现传输的
定义的主要变量和初始化为
CArchive* m_aSessionIn;
CArchive* m_aSessionOut;
CSocketFile* m_sfSocketFile;
m_sfSocketFile= new CSocketFile(this);
m_aSessi />
m_aSessi />
读文件内容到缓冲区(m_dlg为对话框句柄)
文件对话框的打开和保存都是用CFileDialog实现的,都是设置的ALL files
CFile file(m_dlg->m_NeedTransferFiles[i],CFile::modeRead|CFile::shareDenyWrite);
m_dlg->SetWindowText("正在传输"+m_dlg->m_NeedTransferFiles[i]);
byte *buffer=NULL;
long count=file.GetLength();
buffer= new byte[count+1];
file.Read(buffer,count);
buffer[count]='\0';
m.m_iCommand=2;
m.m_strText=buffer;
m_dlg->m_TransferSocket.SendMessage(&m);
m_dlg->SetWindowText(m_dlg->m_NeedTransferFiles[i]+"传输完毕!");
file.Close();
将缓冲区内容写到文件中的代码主要为。msg为CMessg对象,它是我自己添加的,主要是实现串行化的
m_file.Write(msg.m_strText,msg.m_strText.GetLength());
m_file.Close();
CMessg中的函数主要为
void CMessg::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar << m_iCommand;
ar << m_strText;
}
else
{
ar >> m_iCommand;
ar >> m_strText;
}
}
另外sSendmessage函数主要为
if (m_aSessionOut != NULL)
{
msg->Serialize(*m_aSessionOut);
m_aSessionOut->Flush();
return TRUE;
}
我是这方面的新手,请大家指教了
解决方案1:
直接以二进制的形式发过去就行,不用这么麻烦!
解决方案2: 你这样肯定不行了,因为你是用字符串来传递的,应该以字节流来传递.