一個網友想學習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; }