在某个文件夹下面有很多文件(不同类型不同大小)
我的任务一就是读出这些文件
常看到的办法是
BYTE buffer[4096];然后用CFile:Read()分小段读到文件结束。
问题一:(动态大小的buffer)
我要一个和文件大小一样的buffer怎么弄!
也就是说 文件有多大buffer就有多大!一次让我读完一个文件。
好了 文件读出来了!每个文件都有自己的buffer
问题二:(合并N个buffer)
把这些文件的buffer放到一个buffer中就象字符串连接字符串一样!把N变成1
最后我还有两个CString str;int m;
问题三:(把不同类型的数据 转换成buffer 然后再合并)
请把这个字符串str和m放到buffer的开头,最后得到一个完整的buffer
=====================================================================
到目前为止我提出的问题都给了分!回答问题的朋友应该得到肯定和尊重!

解决方案 »

  1.   

    问题一:(动态大小的buffer)HANDLE hFile=CreateFile("yourfile",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);
    DWORD dwSizeHigh=0;
    DWORD dwSizeLow=GetFileSize(hFile,&dwSizeHigh);
    DWORD dwFileLength=dwSizeLow;
    char* buffer=new BYTE[dwFileLength];
    问题二:(合并N个buffer)
    strcat;问题三:(把不同类型的数据 转换成buffer 然后再合并)
    先itoa(m),然后strcat,
      

  2.   

    1.你可以用new来动态分配缓冲区,比如
       char *m_strBuffer = NULL;
       long m_nFileLength = 0;   m_nFileLength = ...  // 这里获取文件长度
       m_strBuffer   = new char[m_nFileLength];  // 动态分配2.其本质就是串的连接操作,实现的方法在数据结构中有介绍。不过建议
    用CString 吧,如下:   CString m_csBuffer;   ...
       m_csBuffer = m_strBuffer1;
       m_csBuffer = m_csBuffer + m_strBuffer2;
       ...
       以后可以用CString::GetBuffer()来获取缓冲区的首地址。3.提示一下,你可以把不同类型的数据全部转换成字符串,然后用1,2的办法
    来处理,相信你可以完成的。
      

  3.   

    哦,搞错了:
    char* buffer=new BYTE[dwFileLength];
    应该是BYTE* buffer=new BYTE[dwFileLength];
      

  4.   

    1:
    CFile  打开后
    用GetLength取得文件的长度
    BYTE * pbyBuffer=new BYTE[file.GetLength()];
    file.ReadHuge(pbyBuffer,file.GetLength());2:
    两个文件合并如下
    BYTE * pbyBuffer=new BYTE[file1Len+file2Len];
    memcpy(pbyBuffer,pbyFile1Buffer,file1Len);
    memcpy(pbyBuffer+pbyFile1Buffer,pbyFile1Buffer,file2Len);3:
    加入不同类型(就像读取二进制文件一样的)
    BYTE * pbyBuffer=new BYTE[fileLen+strlen+sizeof(int)];
    memcpy(pbyBuffer,str.GetBuffer(),strlen);
    memcpy(pbyBuffer+strlen,&m,sizeof(int));
      

  5.   

    1:
    CFile  打开后
    用GetLength取得文件的长度
    BYTE * pbyBuffer=new BYTE[file.GetLength()];
    file.ReadHuge(pbyBuffer,file.GetLength());2:
    两个文件合并如下
    BYTE * pbyBuffer=new BYTE[file1Len+file2Len];
    memcpy(pbyBuffer,pbyFile1Buffer,file1Len);
    memcpy(pbyBuffer+pbyFile1Buffer,pbyFile1Buffer,file2Len);3:
    加入不同类型(就像读取二进制文件一样的)
    BYTE * pbyBuffer=new BYTE[fileLen+strlen+sizeof(int)];
    memcpy(pbyBuffer,str.GetBuffer(),strlen);
    memcpy(pbyBuffer+strlen,&m,sizeof(int));
      

  6.   

    这作为你的一个函数来统计一个文件的buffer,和长度
    int myFileLength;
    FILE* myFile;
    if( !(myFile = fopen("Stephen628.doc","rt"))) return -1;
    fseek(myFile,0,SEEK_END);
    myFileLength = ftell(myFile);
    fseek(myFile,0,SEEK_SET);
    byte* data = new byte[myFileLength];
    fread(data,sizeof(byte),myFileLength,myFile);
    fclose(myFile);先声明个头结构
    typedef struct{ int num;
            int length;
    }aaVOID* total = new char(真正的大小可以得到);
    (aa*) total->附直.....total++;
    逐个复制
    基本思路
      

  7.   

    1.打开文件读取长度   
    m_Buffer   = new char[m_length]; 2.  CString m_Buffer;
    m_Buffer=m_Buffer1+m_Buffer2...
    m_Buffer.GetBuffer()
    3.其实和第二个一样的处理 串连接就可以了
      

  8.   

    我的那个东西已经可以用了!
    我用了上面那位的代码或者建议,我就给谁分!
    BYTE* buffer=new BYTE[Len];这个我用到了
    m_Buffer.GetBuffer()这个我用到了
    这个建议我也用到了:
    思想有问题,如过文件很大(大于2g),你怎么办呀!
    我的第二个问提我全没用大家的方法!
    他说的对,也许一个文件到不了2G,但我把所有的buffer拼起来开销也不小
    最后我读一个buffer就写进去一个!不拼装了
    最后也没合并问题三把事情弄得很复杂!
    用到GetBuffer()就先写进去了!
      

  9.   

    char *m_strBuffer = NULL; 这个初始化用到了 !