2009-05-04 4 views
2

En parcourant certains de mes anciens projets Delphi et en les mettant à jour vers D2009, comme je trouve cette version une grande amélioration (Generics.Collections - wow!;)) À toutes les versions précédentes, je rencontre divers problèmes. Celui que j'ai réussi à résoudre mais la solution ne semble pas aussi élégante que je le crois. (Remarque, je n'ai pas écrit de code Delphi depuis environ trois ans maintenant et même à l'époque, c'était plutôt du piratage amateur que de la compréhension en profondeur de ce qui se passait).D2009 problèmes avec tableau de char - comment puis-je `élégamment 'réparer mon code?

Mon code aurait un TFileStream et en lirait. Les fichiers ont été écrits précédemment par mon application Delphi plus ancienne de telle sorte que les trois premiers caractères du fichier seraient CTR pour reconnaître le type de fichier comme valide. Le lecteur lirait dans les trois premiers octets dans un tableau de caractères (et voici le problème, maintenant que sizeof (char) est de 2 octets), puis traiter ce tableau comme une chaîne pour voir s'il lit "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; 
... 

Cela compilera et utilisé pour travailler mais maintenant tampon est pratiquement 6 octets et n'a donc pas égal « CTR » jamais.

je fixe en changeant le tampon à array[0..2] of byte et j'ai présenté quelques variables locales pour effectuer les opérations suivantes:

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

Donc, fondamentalement, je tourne les octets individuels à une chaîne, puis ne le comparer, mais il doit être une façon plus directe de le faire. Pouvez-vous nous éclairer sur cette question?

Répondre

13

Vous pouvez configurer votre tampon pour

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

et vous lirai dans exactement la même chose que précédemment.

+0

travaillé comme un charme :) merci –

+2

IMHO, array[0..2] of Byte correspond mieux à l'intention. –

Questions connexes