Ver Mensaje Individual
  #9  
Antiguo 21-12-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Una primera aproximacion sería algo como esto:

Código Delphi [-]
function Buscar(Archivo: String; Sub: Pointer; Count: int64): int64;
var
  P: PByte;
  i: int64;
begin
  Result:= -1;
  with TMemoryStream.Create do
  try
    LoadFromFile(Archivo);
    if Size < Count then
      Exit;
    i:= 0;
    P:= Memory;
    while (not CompareMem(Sub,P,Count)) and (i < Size) do
    begin
      inc(P);
      inc(i);
    end;
    if i < Size then
      Result:= i;
  finally
    Free;
  end;
end;

// Por ejemplo
var
  Buffer: Array[1..6]of Byte;
begin
  Buffer[1]:= $00; Buffer[2]:= $F5; Buffer[3]:= $02;
  Buffer[4]:= $40; Buffer[5]:= $00;
  ShowMessage(IntToHex(Buscar('d:\1.dat',@Buffer,5),8));
end;

La función buscar, nos devuelve la posición de la cadena que buscamos, o -1 si no la encuentra. La única desventaja es que cargamos todo el archivo en memoria y si el archivo es muy grande (un par de decenas de megas) puede resultar un problema.
Responder Con Cita