Binary File 比對 |
缺席
|
akok0111
一般會員 發表:6 回覆:3 積分:1 註冊:2003-12-17 發送簡訊給我 |
|
Victor4022
中階會員 發表:0 回覆:76 積分:90 註冊:2011-02-20 發送簡訊給我 |
暴力法比對 :D
[code delphi] var m1, m2 : TMemoryStream; P1 : PAnsiChar; I : Integer; begin m1 := TMemoryStream.Create; m2 := TMemoryStream.Create; m1.LoadFromFile('c:\vpn.pdf'); m2.LoadFromFile('c:\vpn2.pdf'); P1 := m1.Memory; try for I := 0 to m1.Size -1 do begin if CompareMem(P1, m2.Memory, Integer(m2.Size)) then begin ShowMessage(Format('m2 in m1, position = %d', [I])); Exit; end; P1 := P1 1; end; ShowMessage('m2 not in m1'); finally m1.Free; m2.Free; end; end; [/code] |
akok0111
一般會員 發表:6 回覆:3 積分:1 註冊:2003-12-17 發送簡訊給我 |
後來用暴力比對寫出來的程式,不過前提是我已知小檔案在大檔案中的起始位置 //srcpos : begin from 0. std::ifstream src(srcfile,std::ios::binary | std::ios::in); if(!src.is_open()) return false; std::ifstream sub(subfile,std::ios::binary | std::ios::in); if(!sub.is_open()) return false; src.seekg(0,std::ios::end); long srclength=src.tellg(); src.seekg(0,std::ios::beg); sub.seekg(0,std::ios::end); long sublength=sub.tellg(); sub.seekg(0,std::ios::beg); char srcchar,subchar; bool allsubexist=false; for(long i=srcpos;i { src.seekg(i,std::ios::beg); allsubexist=true; if(srclength-i
{ return false; } sub.seekg(0,std::ios::beg); for(long t=0;t
{ src.get(srcchar); sub.get(subchar); if(srcchar!=subchar) { allsubexist=false; break; } } if(allsubexist==true) { break; } } return allsubexist;
編輯記錄
akok0111 重新編輯於 2011-10-19 01:21:09, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |