你把代码放上。。哪有什么别的方法,只有Read和fread能读二进制。

解决方案 »

  1.   

    void ReadFile()
    {
    FILE *fp = fopen(m_sFileName.c_str(),"r"); 
    if(!fp)   

    cout<<"open file failed!\n";   
    return false;  
    }  
    const int bufferSize = 256;  
    char buffer[bufferSize]; 
    fgets(buffer,bufferSize,fp);  
    if (buffer[0] != 'P' || buffer[1] != '5')//"P5" 
    {   
    cout<<"This is not a PGM file!\n"; 
    return false;  

    do{ fgets(buffer, 70, fp); }while(buffer[0] == '#');  /* skip all comment lines */
      sscanf(buffer, "%d %d",&m_nWidth,&m_nHeight); //width and height  fgets(buffer,bufferSize,fp); 
    sscanf(buffer, "%d",&m_nMaxValue); //max value (In general it is equal to 255)  
    m_bPData = new BYTE[m_nWidth*m_nHeight]; //allocate memory for image data  
    // m_bPData = new unsigned short[m_nWidth*m_nHeight]; //allocate memory for image data  
    if(!m_bPData)  
    {   
    cout<<"allocate memory failed\n";  
    return false;  
    }    int count =0; 
    count = fread(m_bPData,1,m_nWidth*m_nHeight,fp);//sizeof(BYTE) 
    fclose(fp);  
    return true;
    }这是我看到的一段代码,是对pgm文件的读取.但是发现读时候遇到1A就不再读取.不知道有什么方法可以把文件全部读入?
    非常感谢yubsh的光临.
      

  2.   

    用fget函数读取?fget函数遇到回车会有问题的,查查fget函数的用法吧,或者换用fread函数
      

  3.   

    二进制要用rb或r+b方式打开读
      

  4.   

    这个程序只是    
       count   =   fread(m_bPData,1,m_nWidth*m_nHeight,fp);//sizeof(BYTE)   
    这句有问题
    我看了二进制码,发现是遇到1A后就停止读取了.不知道为什么.谢谢各位的回复.  
     
     
      

  5.   

    看看是否这个原因
    http://topic.csdn.net/t/20040719/09/3187125.html#
    另,PGM文件应该有固定的格式和结构,LZ要分析一下文件结构,按结构读。
    http://blog.csdn.net/gamer_gerald/archive/2007/06/17/1655756.aspx
      

  6.   

    3楼和4楼的观点都是正确的。读二进制文件,必须用rb之类的方式打开,而且不能用fgets,fscanf等函数。就你的程序来说,只有fread一个函数能用。你弄乱了文本与二进制文件的区别,遇到不可预料的问题,是情理之中。
      

  7.   

    谢谢各位的回复.
    我主要是为了把16位pgm转换成bmp文件.
    现在还没有解决问题.
      

  8.   

    FILE   *fp   =   fopen(m_sFileName.c_str(), "r ");   "r"改为"rb".
    然后全部都用fread(pData,1,sizeof(^),fp)读数据试试看!