Epa problem je u tome sto ti procitas 4 byte i file pointer se pomeri napred za 4 byte recimo: da trazis ove bytove : [2][3][4][5]
[1][2][3][4][5][6][7][8]
Sa ovim tvoj algoritmom ih neces naci jer ce u buf da se ucitaju prva 4 byte sto su [1][2][3][4] pa onda sledeca 4 sto automatski preskace trazena 4 byte.
Resenje je u sledecem ili da mapiras fajl u memoriju kao sto ti je sundance rekao ili da koristis malo neelgantno resenje (zbog velikog broja poziva iste funkcije)
SetFilePointer(fd, -3, NULL, FILE_CURRENT);...
Tako da ti preporucujem da mapiras fajl i da skeniras byte po byte.
Algoritam za to bi isao kao sto sam gore napisao u ASM =) Znam da znas asm pa ne bi trebalo da bude problem da to implementiras u C, gde bi esi bio pointer na pocetak mapiranog fajla =))
Sto se tice same pretrage to je barem prosto, 4 byte ucitas u neku int promenljivu i nju poredis sa trazena 4 byte
ako se ne varam to bi islo ovako :
Code:
while (ReadFile(fd, &moj_int, 4, &bRead)){
if (moj_int = ono_sto_trazis){
SetFilePointer(fd, -4, NULL, FILE_CURRENT);
kopiraj kod
break;
}else
SetFilePointer(fd, -3, NULL, FILE_CURRENT);
}
ja mislim takodje da ces morati da izvrnes ta 4 byte buduci da je x86 little endian... Tako da ako trazis 0x12345678 poredi dobijeni int sa 0x78563412 =)))
Ili pak ukoliko se odlucis za elegantnije resenje koje ja preporucujem to bi islo ovako nesto (ne ljuti se za omaske u C sintaksi jer je davno nisam koristio taj jezik):
Code:
char *file="file.bin";
int fd, temp, *memptr;
int *test, bla=0x78563412, fsize;
fd=CreateFile(file,GENERIC_READ+GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,NULL,NULL);
temp=CreateFileMapping(fd,0,PAGE_READWRITE,0,0,0);
memptr=MapViewOfFile(temp,FILE_MAP_ALL_ACCESS,0,0,0);
fsize=GetFileSize, fd, NULL
test=memptr;
while (test != ((char *)test+fsize)){
if (*test == bla){
kopiraj kod;
break;
}else
(char *)test=(char *)test+1;
}
Ako se ne varam test=(char *)test+1 bi trebalo da pomeri adresu za 1 byte napred, jer koliko me secanje sluzi int * + 1 = +4 byte jer se C uzima (1+*sizeof(pointer_type))
Nadam se da sam pomogao donekle
[Ovu poruku je menjao Vojislav Milunovic dana 12.01.2005. u 23:23 GMT+1]