MFC TransmitFile 函数直接封装了 文件打开 读 ,送往socket 的过程,使用它 直接绑定一个文件 即可传送:
{
//begin
//获取目录所有文件
CFileFind tempFind;
CString path=N9000_CONFIG_PATH_FILE;
CString strFileName;
BOOL bIsFinded = (BOOL)tempFind.FindFile(path);
int nCount = 0;
pThis->m_configFileList.clear();
while(bIsFinded)
{
bIsFinded = (BOOL)tempFind.FindNextFile();
if( !tempFind.IsDots() )
{
nCount++;//文件数
//每次得到一个文件名
strFileName = tempFind.GetFileName();
CString str = N9000_CONFIG_PATH;
str += strFileName;
pThis->m_configFileList.push_back(str);
}
}
unsigned long n9000XmlFileCnt = 0;
n9000XmlFileCnt = pThis->m_configFileList.size();
conn->Send(&n9000XmlFileCnt, sizeof(unsigned long));//先发送目录中文件的数目
//end
for(std::list<CString>::iterator it = pThis->m_configFileList.begin();it != pThis->m_configFileList.end();it++)
{
CFile tf(*it, CFile::modeRead | CFile::shareDenyWrite | CFile::typeBinary);
TAR_HEADER header;
WideCharToMultiByte(CP_ACP, 0, tf.GetFileName(), -1, header.file_name, sizeof(header.file_name), NULL, FALSE);
LARGE_INTEGER size;
GetFileSizeEx(tf.m_hFile, &size);
header.size = size.QuadPart;
TRANSMIT_FILE_BUFFERS buffer;
ZeroMemory(&buffer, sizeof(TRANSMIT_FILE_BUFFERS));
buffer.Head = &header;
buffer.HeadLength = sizeof(header);
TransmitFile(conn->m_hSocket, tf.m_hFile, 0, BUFFER_SIZE, NULL, &buffer, 0);
tf.Close();
}
}