文件特征码扫描工具开发进程 .

晚上没事,加上采用了简单的办法和以前开发过的搜索内存的工具,居然完成了。

下面是界面和一些代码:


 

 

 

 

[c-sharp] view plain copy print ?
  1. //开始搜索   
  2. void C文件特征码扫描工具Dlg::OnBnClickedButton3()  
  3. {  
  4.     m_CListBox.ResetContent();  
  5.     CFile AimFile;  
  6.     std::fstream SettingFile;  
  7.     SettingFile.open(m_csSettingFilePath);  
  8.     char chDataName[100];  
  9.     char chCode[150];  
  10.     BYTE BCode[75],BBuff[1024*100];  
  11.     int iOffset=0;  
  12.     wchar_t wchDataName[100];  
  13.     size_t Size;  
  14.     while(!SettingFile.eof())  
  15.     {  
  16.         SettingFile>>chDataName;  
  17.         MultiByteToWideChar(CP_ACP,0,chDataName,-1,wchDataName,100);  
  18.         memset(chCode,0,150);  
  19.         memset(BCode,0,75);  
  20.         SettingFile>>chCode;  
  21.         SettingFile>>iOffset;  
  22.         Size=CharToBYTE(chCode,BCode);//将读出的特征码由字符串转换BYTE数组   
  23.         if(Size==0)  
  24.         {  
  25.             CString csBuffer=wchDataName;  
  26.             csBuffer+=L":  特征码有误";  
  27.             m_CListBox.AddString(csBuffer);  
  28.             continue;  
  29.         }  
  30.         //下面开始搜索整个文件   
  31.         ULONGLONG ullReadFileSize=0;  
  32.         BOOL bFind=FALSE;  
  33.         AimFile.Open(m_csAimFilePath,CFile::modeRead|CFile::typeBinary|CFile::shareDenyNone);  
  34.         while(ullReadFileSize<=AimFile.GetLength() && !bFind)  
  35.         {  
  36.             AimFile.Read(BBuff,1024*100);//每次读取100K的数据   
  37.             for(int i=0;i<1024*100;i++)  
  38.             {  
  39.                 if(BBuff[i]==BCode[0])  
  40.                 {  
  41.                     if(CompareTwoBYTE(&BBuff[i],BCode,Size))//如果相等,那么找到了   
  42.                     {  
  43.                         CString csBuff=wchDataName;  
  44.                         wchar_t wchBuff[30];  
  45.                         _itow_s((int)ullReadFileSize+i+0x00400000+iOffset,wchBuff,16);  
  46.                         csBuff+=L":  ";  
  47.                         csBuff+=wchBuff;  
  48.                         csBuff.MakeUpper();  
  49.                         m_CListBox.AddString(csBuff);  
  50.                         bFind=TRUE;  
  51.                         break;  
  52.                     }  
  53.                 }  
  54.             }  
  55.             ullReadFileSize+=1024*100;  
  56.         }  
  57.         AimFile.Close();  
  58.         if(!bFind)//如果没有找到   
  59.         {  
  60.             CString csBuff=wchDataName;  
  61.             csBuff+=L":  NULL";  
  62.             m_CListBox.AddString(csBuff);  
  63.         }  
  64.     }  
  65.     SettingFile.close();  
  66. }  
  67. BOOL C文件特征码扫描工具Dlg::CompareTwoBYTE(BYTE* B1, BYTE* B2, size_t Size)  
  68. {  
  69.     for(size_t i=0;i<Size;i++)  
  70.     {  
  71.         if(B1[i]!=B2[i])  
  72.         {  
  73.             return FALSE;  
  74.         }  
  75.     }  
  76.     return TRUE;  
  77. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值