Entwickler-Ecke

Dateizugriff - Byte für Byte


AXMD - Fr 07.02.03 14:33
Titel: Byte für Byte
Hi,

ich möchte ein Programm schreiben, das Dateien verschlüsselt. Soweit so gut: die Verschlüsselung ist fertig. Leider benötige ich eine Möglichkeit, Binärdateien auszulesen. Über Memory-Streams gehts nur schlecht und Byte für Byte auszulesen bringts von der Zeit her nicht wirklich.
Was ich brauche ist im Prinzip nur der Inhalt der Datei. Wer kann helfen?

AXMD


maximus - Fr 07.02.03 14:45

hi, warum Memory-Streams, warum nimmst du nicht file-streams.


DaRkFiRe - Fr 07.02.03 14:55

Ähm - es geht ungefähr so: einen Puffer aus dem FileStream lesen und verschlüsseln.

meinetwegen etwa so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
var rfs,wfs:TFileStream;
var iRead,I:INTEGER;
var pIn,pOut,C1,C2:PCHAR;
var B:BYTE;
const BufSize = 16384; // 16kb Größe des Pufferfensters
begin
rfs:=tfilestream.create(sFileName,fmOpenRead or fmShareDenyWrite);
wfs:=tfilestream.create(sOutput,fmCreate);
getmem(pIn,BufSize+1);
getmem(pOut,BufSize+1);
repeat
  iRead:=RFS.READ(pIn^,BufSize);
  C1:=pIn;
  C2:=pOut;
  FOR I:=1 TO iRead DO
    BEGIN
      B := BYTE(C1^);
////////////////////
      hier Ver oder Entschlüsseln des Bytes
      ablegen des neuen Werts wieder in B
////////////////////
      C2^:= CHAR(B);
      INC(C1);
      INC(C2);
    END;
  WFS.WRITE(pOut^,iRead);
until (RFS.POSITION >= RFS.SIZE);
freemem(pOut,BufSize+1);
freemem(pIn,BufSize+1);
wfs.free;
rfs.free;


Der Code sollte funktionieren - ich kann zum Arbeiten mit Pointern und PChars nur Raten - die Kompatibilität zur WinAPI und die Geschwindigkeit, mit der die Operationen ausgeführt werden, sind einfach überwältigend!