Frage

durch einige meiner älteren Delphi-Projekte gehen und sie zu D2009 aktualisieren, wie ich diese Version eine große Verbesserung zu finden (Generics.Collections - wow;)) an alle früheren Versionen, in denen ich verschiedene Probleme auf. Dieses ich es geschafft, zu lösen, aber die Lösung nicht halb so elegant aussehen, als ich es glauben könnte. (Beachten Sie, ich habe etwa drei Jahre lang nicht geschrieben Delphi-Code jetzt und schon damals war es eher dilettantisch Hacking als in ein tiefes Verständnis von dem, was vor sich geht).

Mein Code würde eine TFileStream hat und von ihnen lesen. Die Dateien wurden zuvor von meinem älteren Delphi app in einer Weise geschrieben, dass die ersten drei Zeichen in der Datei CTR der Dateityp als gültig zu erkennen wäre. Der Leser in den ersten drei Bytes in ein Array von Zeichen lesen würde (und hier ist das Problem, jetzt, dass sizeof (char) 2 Bytes) und dann dieses Array als String behandeln, um zu sehen, ob es liest ‚CTR‘.

var ...
buffer: array[0..2] of char;
begin
...
InStream.read(buffer, 3);
if buffer <>'CTR' then begin ShowMessage('Not a valid file!'); exit; end;
...

Dies kompiliert und es verwendet, aber jetzt arbeiten Puffer ist praktisch 6 Byte lang und daher nicht gleich ‚CTR‘ immer .

Ich reparierte diese durch den Puffer Wechsel zu array[0..2] of byte und ich stellte einige weitere lokale Variablen Folgendes zu tun:

for b in buffer do s := s + chr(b); //notice the for..in loop now available in D2009
if s<>'CTR'...

Also im Grunde habe ich die einzelnen Bytes in einen String drehen und führen Sie dann die vergleichen, aber es muss ein einfacher Weg, dies zu tun. Können Sie bitte etwas Licht ins Dunkel bringen?

War es hilfreich?

Lösung

Sie können Ihre Puffer

gesetzt
var
  buffer: array[0..2] of AnsiChar;

und Sie werden nach wie vor in der exakt gleichen Sache lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top