数据恢复软件(五):用C语言重写了C++的扩展程序.
2013-12-11 22:00
369 查看
这个程序与上个C++的程序实现的功能完全相同.写这个程序的目的是两个:第一可以比较一下C与C++的语言写法的不同.第二比较一下两种写法谁的速度更快.有兴趣的朋友可以比较一下.
本文出自 “锦州数据恢复-硬盘之家” 博客,请务必保留此出处http://jzhdd.blog.51cto.com/287199/1339560
#include <windows.h> #include <iostream> using namespace std; #define MAXSIZE 5*1024*1024 HANDLE f; DWORD fsize; UINT fpoint; struct BmpHeader{ WORD ND; WORD TYPE; UINT size; WORD r1; WORD r2; }bh; const unsigned char PngHeader[8] = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }; const unsigned char PngFooter[8] = { 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82 }; VOID Read(void* lpBuf,UINT nCount) { DWORD Num; ::SetFilePointer(f,fpoint,NULL,FILE_BEGIN); ::ReadFile(f,lpBuf,nCount,&Num,NULL); } VOID Write(LPCTSTR lp,void* lpBuf,UINT nCount) { DWORD Num; HANDLE fout; fout=::CreateFile(lp,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); ::WriteFile(fout,lpBuf,nCount,&Num,NULL); CloseHandle(fout); } VOID BmpGetName(char* c) { sprintf(c,"%d.bmp",fpoint); } VOID PngGetName(char* c) { sprintf(c,"%d.png",fpoint); } VOID Recover(UINT nCount,char* c) { char *dout=new char[nCount]; Read(dout,nCount); Write(c,dout,nCount); delete [] dout; } UINT BmpComRaw() { Read(&(bh.TYPE),10) ; if(bh.TYPE==MAKEWORD('B','M')&&bh.r1==0&&bh.r2==0) { char fname[20]; BmpGetName(fname); Recover(bh.size,fname); return bh.size; } else { return 0; } } UINT PngComRaw() { CHAR temp[8]; Read(temp,8) ; for(int i=0;i<8;i++) { if (temp[i]!=PngHeader[i]) { break; } if (i==7) { CHAR *tempdata=new CHAR[MAXSIZE]; Read(tempdata,MAXSIZE); CHAR *p; for (int i=0;i<MAXSIZE;i++) { p=tempdata+i; for(int j=0;j<8;j++) { if (*(p+j)!=PngFooter[j]) { break; } if (j==7) { char fname[20]; PngGetName(fname); Recover(i,fname); return i; } } } delete [] tempdata; } } return 0; } VOID init(LPCTSTR lp) { f=::CreateFile(lp,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(f==INVALID_HANDLE_VALUE) { cout<<"can't open file"<<endl; exit(0); } fsize=::GetFileSize(f,NULL); fpoint=0; } void main() { init("img"); UINT(*r[2])()={BmpComRaw,PngComRaw}; while(fpoint<fsize) { for (int j=0;j<sizeof(r)/sizeof(r[0]);j++) { (*r[j])(); } fpoint+=512; } cout<<"scan end"<<endl; }
本文出自 “锦州数据恢复-硬盘之家” 博客,请务必保留此出处http://jzhdd.blog.51cto.com/287199/1339560
相关文章推荐
- 数据恢复软件(二):用C++重写恢复BMP位图文件的小程序
- 数据恢复软件(四):使用C++扩展恢复功能
- 数据恢复软件(一):一个恢复BMP位图文件的小程序
- 实用程序软件包(关于使用静态函数报错问题“Static function declared but not defined in C+++ "eh.h is only for C++!"报错问题)
- C语言与C++编译连接的不同点(从程序中看)
- 数据恢复软件介绍
- 重装windows7系统后两种方式将程序软件恢复到开始菜单
- 推荐几款数据恢复的软件
- 我也要学C语言-第三章:C程序的数据,数据类型还有变量
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- C++文本查询程序 定义类管理数据 用智能指针 C++Primer练习12.30
- Unix数据恢复软件--蓝梦软件BestRecoveryForUnix
- C++文本查询程序 定义类管理数据 用智能指针 用StrBlob代替vector<string> C++Primer 练习12.32
- C++文本查询程序 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- C++文本查询程序 定义类管理数据 用智能指针 C++Primer练习12.30
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- 好用的Mac数据恢复软件在这里
- 安联锐视H.264格式监控数据恢复程序 1.0
- 2011年 C++软件程序实验报告(三)