Pa prvo mozes prosto to da uradis, prvo da proveris duzinu dva fajla pre nego sto krenes sa njihovim poredjenjem, to je jedno lepo resenje =)
znaci otvoris fajlove sa CreateFile OPEN_EXISITNG falgom i onda iskoristis GetFileSize jer nema svrhe porediti ako fajlovi nisu iste velicine.
Zatim post osi utvrdio da su fajlovi iste velicine prelazis na mapiranje fajlova u memoriju ->>
Code:
invoke CreateFileA,file,GENERIC_READ,NULL, \
NULL,OPEN_EXISTING,NULL,NULL
cmp eax, INVALID_HANDLE_VALUE
je @perror
mov fd, eax
invoke GetFileSize, fd, NULL
mov fsize, eax
;[ovo sve radis duplo
invoke CreateFileMappingA,fd,0,PAGE_READONLY,0,0,0
or eax, eax
jz @perror
mov temp,eax
invoke MapViewOfFile,temp,FILE_MAP_READ ,0,0,0
or eax, eax
jz @perror
mov memptr, eax
Pri cemo je fd handle koji vraca CreateFileA to mozes da ponovis za oba fajla pri cemu ce na jedan da pokazuje memptr a na drugi memptr1
posle toga kod je vise nego lak:
Code:
mov esi, memptr
mov edi, memptr
mov ecx, filesz
cld
repe cmpsb
jz @isti
i to bi bilo ukratko kako bi to islo preko memorije...
Medjutim ima i tehnika da ucitavas u odredjenim blokovima fajlove i njih da poredis.
Recimo mapiras vece blokove memorije sa VirtualAlloc ili GlobalAlloc. i da u njih sa ReadFile ucitavas mnogo vise nego sto ti radis trenutno sa byte po byte.
i onda vrtis kroz ovo isto:
Code:
mov esi, memptr1
mov edi, memptr2
mov ecx, (velicina_buffera)
cld
repe cmpsb
jz @ucitaj_opet
Pozdrav...