读取一个exe文件结尾的一些数据,用CB写了一段程序,没有问题,但是再用C写的时候就出现错误了,请指点一下 
这个是CB的,可以成功读取 C/C++ code   iFileHandle = FileOpen("c:\\1.exe", fmOpenRead);
   FileSeek(iFileHandle,-(int)sizeof(Config),2);
   ileRead(iFileHandle,&cfg, sizeof(Config));
   FileClose(iFileHandle);
   ShowMessage(cfg.Flag);
这个是C的,读的时候总是失败 ,用ferror()检测应该是读的时候出错了C/C++ code     stream=fopen("c:\\1.exe",  "r+"  );
    if(stream!=NULL)
    {
           iFileLength=    fseek( stream, -(int)sizeof(Config), SEEK_END );
          iFileLength=    fread( &cfg, sizeof(Config), sizeof(Config), stream );
                 ShowMessage(cfg.Flag);
           }cfg是一个结构,前面都用   zeromemory初始化过

解决方案 »

  1.   

    会不会和数据长度有关
    比如borland c++中int 为2字节,vc中4zijie 
      

  2.   

     在CB和VC里都不行fseek(   stream,   0,   SEEK_END   ); 
     fwrite(   &cfg,   68,   68,   stream   ); 
    执行这个操作过后文件变大了4K,是怎么回事?应该增加68个字节啊
      

  3.   


         stream=fopen( "c:\\1.exe ",     "r+ "     ); 
            if(stream!=NULL) 
            { 
                          iFileLength=         fseek(   stream,   -(int)sizeof(Config),   SEEK_END   ); 
                        iFileLength=         fread(   &cfg,   sizeof(Config),   1,   stream   ); 
                                      ShowMessage(cfg.Flag); 
                          } 
    /////////////////////////////////////////////////////////////////
    fseek(       stream,       0,       SEEK_END       );   
      fwrite(       &cfg,       68,       68,       stream       );  //你写了 68个cfg结构到文件
      

  4.   

     iFileLength=         fseek(   stream,   -(int)sizeof(Config),   SEEK_END   ); 
     iFileLength=         fread(   &cfg,   sizeof(Config),   sizeof(Config),   stream   ); 文件指针已经定位到尾段,读取数据当然会失败。
    ----------------------------------------------------fseek(       stream,       0,       SEEK_END       );   
    fwrite(       &cfg,       68,       68,       stream       );   
    执行这个操作过后文件变大了4K,是怎么回事?应该增加68个字节啊
    磁盘每扇区为4K,文件的磁盘占用空间总是4K的整数倍。
    或许你看到的是磁盘占用空间数,而不是文件的大小。