一个网友想学习C语言.向我要个恢复BMP位图文件的程序,我使用了面向过程的设计来写个简单的程序,其中使用了API函数.这个程序本身在实际中没有什么用途.只是用来学习使用。
#include "windows.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
struct BMPHEADER{
WORD ND;
WORD TYPE;
int size;
WORD r1;
WORD r2;
}bh;
HANDLE f,fout;
DWORD Num;
int filesize;
char fname[20];
f=::CreateFile("img",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(f==INVALID_HANDLE_VALUE){return 0;}
filesize=::GetFileSize(f,NULL);
for (int i=0;i<filesize;i+=512)
{
::SetFilePointer(f,i,NULL,FILE_BEGIN);
::ReadFile(f,&(bh.TYPE),10,&Num,NULL);
if(bh.TYPE==MAKEWORD('B','M')&&bh.r1==0&&bh.r2==0)
{
::SetFilePointer(f,i,NULL,FILE_BEGIN);
char *dout=new char[bh.size];
::ReadFile(f,dout,bh.size,&Num,NULL);
sprintf(fname,"%d.bmp",i);
fout=::CreateFile(fname,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
::WriteFile(fout,dout,bh.size,&Num,NULL);
delete [] dout;
CloseHandle(fout);
i=((i+bh.size)/512)*512;
}
}
CloseHandle(f);
return 0;
}
转载于:https://blog.51cto.com/jzhdd/1330277