2009-05-04 6 views
2

Wenn ich einige meiner älteren Delphi-Projekte durchführe und sie auf D2009 aktualisiere, da ich diese Version als große Verbesserung (Generics.Collections - wow!;)) Zu allen früheren Versionen empfinde, stoße ich auf verschiedene Probleme. Diesen habe ich gelöst, aber die Lösung scheint nicht halb so elegant zu sein, wie ich glaube. (Anmerkung, ich habe seit etwa drei Jahren keinen Delphi-Code mehr geschrieben, und selbst damals war es eher amateurhaftes Hacken als gründliches Verstehen dessen, was vor sich geht).D2009 Probleme mit Array von Zeichen - wie kann ich meinen Code "elegant" reparieren?

Mein Code würde einen TFileStream haben und daraus lesen. Die Dateien wurden zuvor von meiner älteren Delphi-App so geschrieben, dass die ersten drei Zeichen in der Datei CTR waren, um den Dateityp als gültig zu erkennen. Der Leser würde in den ersten drei Bytes in ein Array von Zeichen lesen (und hier ist das Problem, jetzt, da sizeof (char) 2 Bytes ist) und dann dieses Array als String behandeln, um zu sehen, ob es 'CTR' liest.

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 deshalb nicht gleich ‚CTR‘ jemals.

Ich reparierte diese durch den Puffer zu array[0..2] of byte verändert und ich führte 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 drehe ich die einzelnen Bytes in einen String und führen Sie dann die vergleichen, aber es muss eine einfachere Möglichkeit sein, dies zu tun. Können Sie bitte etwas Licht in dieses Thema bringen?

Antwort

13

Sie können Ihre Puffer

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

und Sie werden in die exakt gleiche Sache lesen wie zuvor eingestellt.

+0

arbeitete als Charme :) danke –

+2

IMHO, array[0..2] of Byte entspricht der Absicht besser. –

Verwandte Themen