TFileStream mit Offset

8

Ich muss TFileStream so erweitern, dass es mit einer Datei arbeiten kann, die nicht aus dem Offset 0, sondern aus dem benutzerdefinierten Offset stammt. Ich meine, es muss den benutzerdefinierten Offset als Stream-Anfang interpretieren. Mein Code ist:

%Vor%

aber es funktioniert nicht richtig. Das Problem liegt in der Suchfunktion, aber ich weiß nicht warum. Wenn ich einen solchen Stream an eine Drittanbieterkomponente übergebe, funktioniert dies nur, wenn TSuFileStream.Offset: = 0;

    
JuniorD 12.05.2011, 15:32
quelle

2 Antworten

2

Verwenden TGpStreamWindow , verfügbar auf meinem Web und auf Google-Code .

Verwendung:

%Vor%     
gabr 13.05.2011, 07:15
quelle
8

Überschreiben Sie zunächst nur eine der Methodenversionen. Wie Sie aus der Klassenschnittstelle sehen können, haben Sie sowohl longint als auch int64 Versionen der gleichen Methoden (wie setSize und seek). Dies ist in der Delphi-Dokumentation. Überschreibe die int64-Versionen.

Zweitens würde ich TFilestream nicht überschreiben, sondern direkt TStream, um einen "In-Stream" zu erstellen, mit dem ich arbeiten kann.

Im Konstruktor würde ich 2 Parameter eingeben:

  1. Tatsächlicher Quelldatenstrom eines beliebigen Typs
  2. Verschiebung

Was Sie also eigentlich erstellen möchten, ist ein Proxy zwischen dem echten Stream und Ihrer benutzerdefinierten Version. Auf diese Weise müssen Sie in Ihrer Suchimplementierung den Offset (siehe TMemoryStream und TFileStream, um zu sehen, wie es gemacht wird) zur Position hinzufügen. Sie können auch jede Art von Stream-Quelle unterstützen.

Sie sollten mit einem Proxy enden, der einfach zu verwenden ist:

%Vor%

Die Suchfunktion kann etwas schwierig zu berechnen sein. Hier ist ein Beispiel aus einer Proxy-Klasse, die ich für mein Puffersystem codiert habe (FOffset ist eine interne Variable, die Sie manipulieren wollen):

%Vor%

Ich aktualisiere diese Antwort jetzt mit einem Update-Link. Meine Bibliothek Byterage wurde in den Google-Code verschoben. Schauen Sie dort nach. Hoffe es hilft!

    
Jon Lennart Aasenden 12.05.2011 15:49
quelle

Tags und Links