Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Fr 07.02.03 14:33 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Fr 07.02.03 14:45 
hi, warum Memory-Streams, warum nimmst du nicht file-streams.
DaRkFiRe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 526

WinXP Home & Professional
C, C++, Delphi
BeitragVerfasst: Fr 07.02.03 14:55 
Ähm - es geht ungefähr so: einen Puffer aus dem FileStream lesen und verschlüsseln.

meinetwegen etwa so:

ausblenden volle Höhe 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!

_________________
Lang ist der Weg durch Lehren - kurz und wirksam durch Beispiele! Seneca