读取一个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初始化过
这个是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初始化过
比如borland c++中int 为2字节,vc中4zijie
fwrite( &cfg, 68, 68, stream );
执行这个操作过后文件变大了4K,是怎么回事?应该增加68个字节啊
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结构到文件
iFileLength= fread( &cfg, sizeof(Config), sizeof(Config), stream ); 文件指针已经定位到尾段,读取数据当然会失败。
----------------------------------------------------fseek( stream, 0, SEEK_END );
fwrite( &cfg, 68, 68, stream );
执行这个操作过后文件变大了4K,是怎么回事?应该增加68个字节啊
磁盘每扇区为4K,文件的磁盘占用空间总是4K的整数倍。
或许你看到的是磁盘占用空间数,而不是文件的大小。