需要一次读入一个二进制文件的数据到byte数组,然后在其头部填上字符串.并用SOCKET发送掉

解决方案 »

  1.   

    struct data
    {
      CString str;  //头
      void* buf;};
    CFile打开文件时指定CFile::typeBinary |CFile::modeRead.然后将数据读到buf缓冲区中。发送可以用CSocket,他又串行化。很方便。
      

  2.   

    你先要知道字符串的长度, 比如strlen
    CString str = "head test";
    DWORD strlen = str.GetLength();
    CFile file("data.bin", CFile::modeRead);
    DWORD fileLen = file.GetLength();
    char *pBuf = new char[fileLen + strlen + 1];
    strcpy(pBuf, str);
    file.Read(pBuf+strlen+1, fileLen);
    file.Close();
    ...
    pSocket->Send(pBuf, fileLen + strlen + 1);
      

  3.   

    不用那么麻烦,你可以利用Winsock2的TransmitFile()函数直接将文件及头部数据发送出去,这样非常高效
      

  4.   

    CString lpszFileName = "你的文件名";
    HANDLE m_hFile = CreateFile(lpszFileName, GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE)0);
    HANDLE m_hFileMapping = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, 0, 0, NULL);
    BYTE *m_pFileData = (LPBYTE)MapViewOfFile(m_hFileMapping, FILE_MAP_READ, 0, 0, 0);在前面加字符串我的做法可不大好了
    int fileLen = GetFileLength(hFile);
    CString YourStr;
    BYTE *pByte = new Byte[fileLen+YourStr.GetLength()];
    memcpy(pByte, YouStr.GetBuffer(0), YourStr.GetLength());
    memcpy(pByte+YourStr, m_pFileData, fileLen);
    发送完后YouStr.ReleaseBuffer();  delete[] pByte;