數據恢復軟件(一):一個恢復BMP位圖文件的小程序

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章