Thema: Delphi Datei durchsuchen

Einzelnen Beitrag anzeigen

Benutzerbild von Techcrawler
Techcrawler

Registriert seit: 14. Sep 2006
Ort: Neukirchen-Vluyn
40 Beiträge
 
Delphi 2006 Architect
 
#4

Re: Datei durchsuchen

  Alt 5. Mär 2009, 09:04
Ich hab nun mal folgende Idee gehabt:

Ich lese einen Block von 256 Zeichen aus. Ist die gesuchte Zeichenkette drin -> bingo, wenn nicht, gehe ich mit FileSeek die Anzahl von Zeichen zurück, die der längsten Zeichenkette entsprechen, die ich suche. Damit sollte ich den Fall kompensieren können, der auftritt, wenn die ZK grade nur zum Teil im ausgelesenen Puffer liegt. Das ganze bis zum Dateiende.
Theoretisch sollte das doch gehen, oder?

Dummerweise funktioniert es nicht, warum auch immer, hier mal mein Code dazu:
Delphi-Quellcode:
function TForm2.HexcodeInFile(HexCodeList: array of string): boolean;
var
    bufferBig: array [0..255] of char;
    sHexBigBuffer,
    sTmpBuffer: string;
    iHexListCounter,
    iFileSeekResult,
    iFileReadResult,
    iMaxHexCode,
    i: integer;
begin

    Result := false;
    Label4.Caption := '';
    iMaxHexCode := 0;

    for i := 0 to Length(HexCodeList) - 1 do
    begin
        if Length(HexCodeList[i]) > iMaxHexCode then
            iMaxHexCode := Length(HexCodeList[i]);
    end;

    iFileSeekResult := FileSeek(hFileHandle,0,0);
    while not iFileSeekResult < 0 do
    begin

        iFileReadResult := FileRead(hFileHandle,bufferBig,256);
        sHexBigBuffer := ParseHex(bufferBig);

        for iHexListCounter := 0 to Length(HexCodeList) - 1 do
        begin

            sTmpBuffer := HexCodeList[iHexListCounter];

            if not (StrPos(PChar(sHexBigBuffer),PChar(sTmpBuffer)) = nil) then
            begin
                Result := true;
                Exit;
            end;

        end;

        if iFileReadResult < 256 then
            Exit;

        iFileSeekResult := FileSeek(hFileHandle,-iMaxHexCode-1,1);
        Label4.Caption := IntToStr(iFileSeekResult);
        Application.ProcessMessages;
                    
    end;
   
end;
ParseHex ist eine Funktion, die mit Zeichen für Zeichen eines Strings in den entsprechenden HexCode verwandelt. Die Labels sind nur für mich zur Anzeige gedacht, die Datei wird vor dem Funktionsaufruf mit FileOpen geöffnet und dannach wieder per FileClose geschlossen, hFileHandle ist dazu das entsprechende Handle auf die Datei.

Ich gebe nun also eine Datei hinein, von der ich ganz genau weiß, dass diese das gesuchte enthält. Allerdings erhalte ich immer ein Result false zurück.

Ich frage mich nun, warum nur?
  Mit Zitat antworten Zitat