以下代码在龚建伟的串口源码代码上修改而来!
因为龚建伟的串口源码发送文件错误,故作了下修改,可以发送文件了,希望可以帮助到需要的童鞋们!
经过调试,终于把这段代码给写好啦!
先通过一个button 打开一个文件,然后通过文件函数,把打开的文件读到一个指针buffer中,再利用串口函数把读到的数据发送出去。
在此注意:用串口发送函数时,用这个函数(因为是指针数据,所以需要指出文件的长度fplength):
m_Port.WriteToPort((LPCTSTR)fpBuff,fplength); //发送数据//打开文件
void CserialDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: Add your control notification handler code here
LPCSTR lpszPath = "c:\\comdata";
SetCurrentDirectory( lpszPath );
static char BASED_CODE szFilter[] = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
CFileDialog FileDlg( TRUE, NULL, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFilter );
FileDlg.m_ofn.lpstrInitialDir = lpszPath ;
if( FileDlg.DoModal() ==IDOK )
{
CString strFileName = FileDlg.GetFileName( );
CString strFileExt = FileDlg.GetFileExt( );
CString lpstrName = FileDlg.GetPathName( );
m_strSendFilePathName=lpstrName;
UpdateData(FALSE);
}
}
//发送文件
void CserialDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
CFile fp;
if(!(fp.Open((LPCTSTR)m_strSendFilePathName,CFile::modeRead)))
{
AfxMessageBox("Open file failed!");
return;
}
fp.SeekToEnd();
unsigned long fplength=fp.GetLength();
m_nFileLength=fplength;
char* fpBuff=NULL;
fpBuff=new char[fplength];
fp.SeekToBegin();
if(fp.Read(fpBuff,fplength)<1)
{
fp.Close();
return;
}
fp.Close();
if(m_Port.m_hComm==NULL)
{
m_ctrlAutoSend.SetCheck(0);
AfxMessageBox("串口没有打开,请打开串口");
return;
}
else
{
UpdateData(TRUE);
if(m_ctrlHexSend.GetCheck())
{
char data[512];
int len=Str2Hex(m_strSendData,data);
m_Port.WriteToPort(data,len);
TX_count+=(long)((m_strSendData.GetLength()+1)/3);
//m_Port.WriteToPort(hexdata);
}
else
{
//m_Port.WriteToPort((LPCTSTR)m_strSendData); //发送数据
m_Port.WriteToPort((LPCTSTR)fpBuff,fplength); //发送数据
//TX_count+=m_strSendData.GetLength();
TX_count+=fplength;
}
CString strTemp;
strTemp.Format("TX:%d",TX_count);
m_ctrlTXCount.SetWindowText(strTemp);
delete fpBuff;
}
}