Entwickler-Ecke
Algorithmen, Optimierung und Assembler - array of Byte verändern+TFileStream.WriteBuffer
JayEff - Mi 18.05.05 16:27
Titel: array of Byte verändern+TFileStream.WriteBuffer
Tach Leute,
im Endeffekt wollte ich eine Procedure schreiben, die mir eine Datei verschlüsselt. Das Schreiben von einer Datei in die Nächste klappt, solange ich die markierte Stelle weglasse. Wenn ich sie dazu mache, dann schreibt er den Inhalt der Datei in fs2, unverändert, und beim Beenden des Programms gibts ne ungültige Zeigeroperation. THEORETISCH würde ja aus a b werden und so weiter, aber das klappt nicht.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Var fs, fs2: TFileStream; Puffer: Array Of Byte; i, size: integer; Label ende; begin
SetLength(Puffer, size+1); For i := 0 To size-1 Do Begin Application.ProcessMessages; If stop Then Goto ende; ProgressBar1.StepIt; ProgressBar2.StepIt; fs.ReadBuffer(Puffer, 1); Puffer[i]:=Puffer[i]+1; fs2.WriteBuffer(Puffer, 1); End; |
Woran könnte es liegen? Ich kenn mich mit Array of Byte und TFileStream nich so dolle aus... Danke schonmal!
[edit: Titel geändert.. :oops:]
Heiko - Mi 18.05.05 17:04
Versuch mal es mal mit:
Delphi-Quelltext
1:
| SetLength(Puffer, size+2); |
Es müsste daran liegen, dass du auf ein nicht existierendes Elemet zugreifst. Gib mal deine genaue Fehlermeldung durch, wenn es das Problem nicht beseitigt.
JayEff - Mi 18.05.05 17:06
hm.. einich ja nich, da ich nur auf elemente von 0 bis size-1 zu greife, das array geht aber von 0 bis size. Anbei die Fehlermeldung, auf wunsch. Die kommt immer beim schließen.
Heiko - Mi 18.05.05 17:12
Ich habe gerade deinen Quelltext noch einmal überdacht. Am Setlength liegt es doch nicht. Mir ist dafür etwas anderes aufgefallen.
JayEff hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Var fs, fs2: TFileStream; Puffer: Array Of Byte; i, size: integer; Label ende; begin
SetLength(Puffer, size+1); For i := 0 To size-1 Do Begin Application.ProcessMessages; If stop Then Goto ende; ProgressBar1.StepIt; ProgressBar2.StepIt; fs.ReadBuffer(Puffer[i], 1); Puffer[i]:=Puffer[i]+1; fs2.WriteBuffer(Puffer[i], 1); End; | |
Probier es mal damit. Die Variante ist aber nicht wirklich effektiv. Du solltest lieber immer k*512 Bytes auslesen(k € N). Und ich weiß auch nicht, warum du das in ein Array einspeicherst, wenn du nur 1 Byte ausliest und den dann sofort woanders wieder hinschreibst.
JayEff - Mi 18.05.05 17:24
LOL???? ok, daran lags oO jetzt klappts... komisch, dass es vorher klappte... oO
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!