Thema: Delphi Datei durchsuchen

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#8

Re: Datei durchsuchen

  Alt 5. Mär 2009, 10:08
StrToHex sollte doch eigentlich alle Zeichen behandeln?
ist ja schließlich ein Vorteil der Delphistrings (mit Längenangabe)

Aber an deiner stelle würde ich das ganz anders angehen.
Wandle deine HexStrings am Anfang in Binärfolgen um und suche diese direkt ... so brauchst du nicht die ganze rießige Datei umzuwandeln, sondern nur die kleinen SuchStrings

mal schnell umgebaut:
Delphi-Quellcode:
Function HexcodeInFile(Const FileName: String; Const HexCodeList: Array of String): Boolean;
  Const BufferSize = 65536;

  Var Data: Array of String;
    F: TFileStream;
    L: Int64;
    Buffer: AnsiString;
    i, MaxDataSize: Integer;

  Begin
    Result := False;
    MaxDataSize := 0;
    SetLength(Data, Length(HexCodeList));
    For i := 0 to High(HexCodeList) do Begin
      SetLength(Data[i], Length(HexCodeList[i]) div 2);
      HexToBin(PChar(HexCodeList[i]), PChar(Data[i]), Length(Data[i]));
      If Length(Data[i]) > MaxDataSize Then MaxDataSize := Length(Data[i]);
    End;
    F := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    Try
      L := F.Size;
      Buffer := '';
      While F.Position + Length(Buffer) < L do Begin
        i := Length(Buffer);
        SetLength(Buffer, i + BufferSize);
        SetLength(Buffer, i + F.Read(Buffer[i + 1], BufferSize));
        For i := 0 to High(Data) do
          If Pos(Data[i], Buffer) > 0 Then Begin
            Result := True;
            Break;
          End;
        Delete(Buffer, 1, Length(Buffer) - MaxDataSize);
      End;
    Finally
      F.Free;
    End;
  End;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat